##// 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,6 +1,6 b''
1 1 [bumpversion]
2 current_version = 4.9.1
2 current_version = 4.10.0
3 3 message = release: Bump version {current_version} to {new_version}
4 4
5 5 [bumpversion:file:rhodecode/VERSION]
6 6
@@ -1,33 +1,28 b''
1 1 [DEFAULT]
2 2 done = false
3 3
4 4 [task:bump_version]
5 5 done = true
6 6
7 7 [task:rc_tools_pinned]
8 done = true
9 8
10 9 [task:fixes_on_stable]
11 done = true
12 10
13 11 [task:pip2nix_generated]
14 done = true
15 12
16 13 [task:changelog_updated]
17 done = true
18 14
19 15 [task:generate_api_docs]
20 done = true
16
17 [task:updated_translation]
21 18
22 19 [release]
23 state = prepared
24 version = 4.9.1
25
26 [task:updated_translation]
20 state = in_progress
21 version = 4.10.0
27 22
28 23 [task:generate_js_routes]
29 24
30 25 [task:updated_trial_license]
31 26
32 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 4 WEBPACK=./node_modules/webpack/bin/webpack.js
5 5 GRUNT=grunt
6 6 NODE_PATH=./node_modules
7 7
8 8
9 9 clean:
10 10 make test-clean
11 11 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' \) -exec rm '{}' ';'
12 12
13 13 test:
14 14 make test-clean
15 15 make test-only
16 16
17 17 test-clean:
18 18 rm -rf coverage.xml htmlcov junit.xml pylint.log result
19 19 find . -type d -name "__pycache__" -prune -exec rm -rf '{}' ';'
20 20
21 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 42 docs:
25 43 (cd docs; nix-build default.nix -o result; make clean html)
26 44
27 45 docs-clean:
28 46 (cd docs; make clean)
29 47
30 48 docs-cleanup:
31 49 (cd docs; make cleanup)
32 50
33 51 web-build:
34 52 NODE_PATH=$(NODE_PATH) $(GRUNT)
35 53
@@ -1,678 +1,725 b''
1 1
2 2
3 3 ################################################################################
4 4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
5 5 # The %(here)s variable will be replaced with the parent directory of this file#
6 6 ################################################################################
7 7
8 8 [DEFAULT]
9 9 debug = true
10 10
11 11 ################################################################################
12 12 ## EMAIL CONFIGURATION ##
13 13 ## Uncomment and replace with the email address which should receive ##
14 14 ## any error reports after an application crash ##
15 15 ## Additionally these settings will be used by the RhodeCode mailing system ##
16 16 ################################################################################
17 17
18 18 ## prefix all emails subjects with given prefix, helps filtering out emails
19 19 #email_prefix = [RhodeCode]
20 20
21 21 ## email FROM address all mails will be sent
22 22 #app_email_from = rhodecode-noreply@localhost
23 23
24 24 ## Uncomment and replace with the address which should receive any error report
25 25 ## note: using appenlight for error handling doesn't need this to be uncommented
26 26 #email_to = admin@localhost
27 27
28 28 ## in case of Application errors, sent an error email form
29 29 #error_email_from = rhodecode_error@localhost
30 30
31 31 ## additional error message to be send in case of server crash
32 32 #error_message =
33 33
34 34
35 35 #smtp_server = mail.server.com
36 36 #smtp_username =
37 37 #smtp_password =
38 38 #smtp_port =
39 39 #smtp_use_tls = false
40 40 #smtp_use_ssl = true
41 41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
42 42 #smtp_auth =
43 43
44 44 [server:main]
45 45 ## COMMON ##
46 46 host = 127.0.0.1
47 47 port = 5000
48 48
49 49 ##################################
50 50 ## WAITRESS WSGI SERVER ##
51 51 ## Recommended for Development ##
52 52 ##################################
53 53
54 54 use = egg:waitress#main
55 55 ## number of worker threads
56 56 threads = 5
57 57 ## MAX BODY SIZE 100GB
58 58 max_request_body_size = 107374182400
59 59 ## Use poll instead of select, fixes file descriptors limits problems.
60 60 ## May not work on old windows systems.
61 61 asyncore_use_poll = true
62 62
63 63
64 64 ##########################
65 65 ## GUNICORN WSGI SERVER ##
66 66 ##########################
67 67 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
68 68
69 69 #use = egg:gunicorn#main
70 70 ## Sets the number of process workers. You must set `instance_id = *`
71 71 ## when this option is set to more than one worker, recommended
72 72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
73 73 ## The `instance_id = *` must be set in the [app:main] section below
74 74 #workers = 2
75 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 77 #threads = 1
78 78 ## process name
79 79 #proc_name = rhodecode
80 80 ## type of worker class, one of sync, gevent
81 81 ## recommended for bigger setup is using of of other than sync one
82 82 #worker_class = sync
83 83 ## The maximum number of simultaneous clients. Valid only for Gevent
84 84 #worker_connections = 10
85 85 ## max number of requests that worker will handle before being gracefully
86 86 ## restarted, could prevent memory leaks
87 87 #max_requests = 1000
88 88 #max_requests_jitter = 30
89 89 ## amount of time a worker can spend with handling a request before it
90 90 ## gets killed and restarted. Set to 6hrs
91 91 #timeout = 21600
92 92
93 93
94 94 ## prefix middleware for RhodeCode.
95 95 ## recommended when using proxy setup.
96 96 ## allows to set RhodeCode under a prefix in server.
97 97 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
98 98 ## And set your prefix like: `prefix = /custom_prefix`
99 99 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
100 100 ## to make your cookies only work on prefix url
101 101 [filter:proxy-prefix]
102 102 use = egg:PasteDeploy#prefix
103 103 prefix = /
104 104
105 105 [app:main]
106 106 use = egg:rhodecode-enterprise-ce
107 107
108 108 ## enable proxy prefix middleware, defined above
109 109 #filter-with = proxy-prefix
110 110
111 111 # During development the we want to have the debug toolbar enabled
112 112 pyramid.includes =
113 113 pyramid_debugtoolbar
114 rhodecode.utils.debugtoolbar
115 114 rhodecode.lib.middleware.request_wrapper
116 115
117 116 pyramid.reload_templates = true
118 117
119 118 debugtoolbar.hosts = 0.0.0.0/0
120 119 debugtoolbar.exclude_prefixes =
121 120 /css
122 121 /fonts
123 122 /images
124 123 /js
125 124
126 125 ## RHODECODE PLUGINS ##
127 126 rhodecode.includes =
128 127 rhodecode.api
129 128
130 129
131 130 # api prefix url
132 131 rhodecode.api.url = /_admin/api
133 132
134 133
135 134 ## END RHODECODE PLUGINS ##
136 135
137 136 ## encryption key used to encrypt social plugin tokens,
138 137 ## remote_urls with credentials etc, if not set it defaults to
139 138 ## `beaker.session.secret`
140 139 #rhodecode.encrypted_values.secret =
141 140
142 141 ## decryption strict mode (enabled by default). It controls if decryption raises
143 142 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
144 143 #rhodecode.encrypted_values.strict = false
145 144
146 145 ## return gzipped responses from Rhodecode (static files/application)
147 146 gzip_responses = false
148 147
149 148 ## autogenerate javascript routes file on startup
150 149 generate_js_files = false
151 150
152 151 ## Optional Languages
153 152 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
154 153 lang = en
155 154
156 155 ## perform a full repository scan on each server start, this should be
157 156 ## set to false after first startup, to allow faster server restarts.
158 157 startup.import_repos = false
159 158
160 159 ## Uncomment and set this path to use archive download cache.
161 160 ## Once enabled, generated archives will be cached at this location
162 161 ## and served from the cache during subsequent requests for the same archive of
163 162 ## the repository.
164 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 170 ## change this to unique ID for security
167 171 app_instance_uuid = rc-production
168 172
169 ## cut off limit for large diffs (size in bytes)
170 cut_off_limit_diff = 1024000
171 cut_off_limit_file = 256000
173 ## cut off limit for large diffs (size in bytes). If overall diff size on
174 ## commit, or pull request exceeds this limit this diff will be displayed
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 183 ## use cache version of scm repo everywhere
174 184 vcs_full_cache = true
175 185
176 186 ## force https in RhodeCode, fixes https redirects, assumes it's always https
177 187 ## Normally this is controlled by proper http flags sent from http server
178 188 force_https = false
179 189
180 190 ## use Strict-Transport-Security headers
181 191 use_htsts = false
182 192
183 193 ## number of commits stats will parse on each iteration
184 194 commit_parse_limit = 25
185 195
186 196 ## git rev filter option, --all is the default filter, if you need to
187 197 ## hide all refs in changelog switch this to --branches --tags
188 198 git_rev_filter = --branches --tags
189 199
190 200 # Set to true if your repos are exposed using the dumb protocol
191 201 git_update_server_info = false
192 202
193 203 ## RSS/ATOM feed options
194 204 rss_cut_off_limit = 256000
195 205 rss_items_per_page = 10
196 206 rss_include_diff = false
197 207
198 208 ## gist URL alias, used to create nicer urls for gist. This should be an
199 209 ## url that does rewrites to _admin/gists/{gistid}.
200 210 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
201 211 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
202 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 215 ## used for access.
206 216 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
207 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.
210 ## To enable access to raw_files put `FilesController:raw`.
211 ## To enable access to patches add `ChangesetController:changeset_patch`.
222 ## list of all views can be found under `/_admin/permissions/auth_token_access`
212 223 ## The list should be "," separated and on a single line.
213 224 ##
214 ## Recommended controllers to enable:
215 # ChangesetController:changeset_patch,
216 # ChangesetController:changeset_raw,
217 # FilesController:raw,
218 # FilesController:archivefile,
219 # GistsController:*,
225 ## Most common views to enable:
226 # RepoCommitsView:repo_commit_download
227 # RepoCommitsView:repo_commit_patch
228 # RepoCommitsView:repo_commit_raw
229 # RepoCommitsView:repo_commit_raw@TOKEN
230 # RepoFilesView:repo_files_diff
231 # RepoFilesView:repo_archivefile
232 # RepoFilesView:repo_file_raw
233 # GistView:*
220 234 api_access_controllers_whitelist =
221 235
222 236 ## default encoding used to convert from and to unicode
223 237 ## can be also a comma separated list of encoding in case of mixed encodings
224 238 default_encoding = UTF-8
225 239
226 240 ## instance-id prefix
227 241 ## a prefix key for this instance used for cache invalidation when running
228 242 ## multiple instances of rhodecode, make sure it's globally unique for
229 243 ## all running rhodecode instances. Leave empty if you don't use it
230 244 instance_id =
231 245
232 246 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
233 247 ## of an authentication plugin also if it is disabled by it's settings.
234 248 ## This could be useful if you are unable to log in to the system due to broken
235 249 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
236 250 ## module to log in again and fix the settings.
237 251 ##
238 252 ## Available builtin plugin IDs (hash is part of the ID):
239 253 ## egg:rhodecode-enterprise-ce#rhodecode
240 254 ## egg:rhodecode-enterprise-ce#pam
241 255 ## egg:rhodecode-enterprise-ce#ldap
242 256 ## egg:rhodecode-enterprise-ce#jasig_cas
243 257 ## egg:rhodecode-enterprise-ce#headers
244 258 ## egg:rhodecode-enterprise-ce#crowd
245 259 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
246 260
247 261 ## alternative return HTTP header for failed authentication. Default HTTP
248 262 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
249 263 ## handling that causing a series of failed authentication calls.
250 264 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
251 265 ## This will be served instead of default 401 on bad authnetication
252 266 auth_ret_code =
253 267
254 268 ## use special detection method when serving auth_ret_code, instead of serving
255 269 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
256 270 ## and then serve auth_ret_code to clients
257 271 auth_ret_code_detection = false
258 272
259 273 ## locking return code. When repository is locked return this HTTP code. 2XX
260 274 ## codes don't break the transactions while 4XX codes do
261 275 lock_ret_code = 423
262 276
263 277 ## allows to change the repository location in settings page
264 278 allow_repo_location_change = true
265 279
266 280 ## allows to setup custom hooks in settings page
267 281 allow_custom_hooks_settings = true
268 282
269 283 ## generated license token, goto license page in RhodeCode settings to obtain
270 284 ## new token
271 285 license_token =
272 286
273 287 ## supervisor connection uri, for managing supervisor and logs.
274 288 supervisor.uri =
275 289 ## supervisord group name/id we only want this RC instance to handle
276 290 supervisor.group_id = dev
277 291
278 292 ## Display extended labs settings
279 293 labs_settings_active = true
280 294
281 295 ####################################
282 296 ### CELERY CONFIG ####
283 297 ####################################
284 298 use_celery = false
285 299 broker.host = localhost
286 300 broker.vhost = rabbitmqhost
287 301 broker.port = 5672
288 302 broker.user = rabbitmq
289 303 broker.password = qweqwe
290 304
291 305 celery.imports = rhodecode.lib.celerylib.tasks
292 306
293 307 celery.result.backend = amqp
294 308 celery.result.dburi = amqp://
295 309 celery.result.serialier = json
296 310
297 311 #celery.send.task.error.emails = true
298 312 #celery.amqp.task.result.expires = 18000
299 313
300 314 celeryd.concurrency = 2
301 315 #celeryd.log.file = celeryd.log
302 316 celeryd.log.level = debug
303 317 celeryd.max.tasks.per.child = 1
304 318
305 319 ## tasks will never be sent to the queue, but executed locally instead.
306 320 celery.always.eager = false
307 321
308 322 ####################################
309 323 ### BEAKER CACHE ####
310 324 ####################################
311 325 # default cache dir for templates. Putting this into a ramdisk
312 326 ## can boost performance, eg. %(here)s/data_ramdisk
313 327 cache_dir = %(here)s/data
314 328
315 329 ## locking and default file storage for Beaker. Putting this into a ramdisk
316 330 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
317 331 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
318 332 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
319 333
320 334 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
321 335
322 336 beaker.cache.super_short_term.type = memory
323 337 beaker.cache.super_short_term.expire = 10
324 338 beaker.cache.super_short_term.key_length = 256
325 339
326 340 beaker.cache.short_term.type = memory
327 341 beaker.cache.short_term.expire = 60
328 342 beaker.cache.short_term.key_length = 256
329 343
330 344 beaker.cache.long_term.type = memory
331 345 beaker.cache.long_term.expire = 36000
332 346 beaker.cache.long_term.key_length = 256
333 347
334 348 beaker.cache.sql_cache_short.type = memory
335 349 beaker.cache.sql_cache_short.expire = 10
336 350 beaker.cache.sql_cache_short.key_length = 256
337 351
338 352 ## default is memory cache, configure only if required
339 353 ## using multi-node or multi-worker setup
340 354 #beaker.cache.auth_plugins.type = ext:database
341 355 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
342 356 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
343 357 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
344 358 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
345 359 #beaker.cache.auth_plugins.sa.pool_size = 10
346 360 #beaker.cache.auth_plugins.sa.max_overflow = 0
347 361
348 362 beaker.cache.repo_cache_long.type = memorylru_base
349 363 beaker.cache.repo_cache_long.max_items = 4096
350 364 beaker.cache.repo_cache_long.expire = 2592000
351 365
352 366 ## default is memorylru_base cache, configure only if required
353 367 ## using multi-node or multi-worker setup
354 368 #beaker.cache.repo_cache_long.type = ext:memcached
355 369 #beaker.cache.repo_cache_long.url = localhost:11211
356 370 #beaker.cache.repo_cache_long.expire = 1209600
357 371 #beaker.cache.repo_cache_long.key_length = 256
358 372
359 373 ####################################
360 374 ### BEAKER SESSION ####
361 375 ####################################
362 376
363 377 ## .session.type is type of storage options for the session, current allowed
364 378 ## types are file, ext:memcached, ext:database, and memory (default).
365 379 beaker.session.type = file
366 380 beaker.session.data_dir = %(here)s/data/sessions/data
367 381
368 382 ## db based session, fast, and allows easy management over logged in users
369 383 #beaker.session.type = ext:database
370 384 #beaker.session.table_name = db_session
371 385 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
372 386 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
373 387 #beaker.session.sa.pool_recycle = 3600
374 388 #beaker.session.sa.echo = false
375 389
376 390 beaker.session.key = rhodecode
377 391 beaker.session.secret = develop-rc-uytcxaz
378 392 beaker.session.lock_dir = %(here)s/data/sessions/lock
379 393
380 394 ## Secure encrypted cookie. Requires AES and AES python libraries
381 395 ## you must disable beaker.session.secret to use this
382 396 #beaker.session.encrypt_key = key_for_encryption
383 397 #beaker.session.validate_key = validation_key
384 398
385 399 ## sets session as invalid(also logging out user) if it haven not been
386 400 ## accessed for given amount of time in seconds
387 401 beaker.session.timeout = 2592000
388 402 beaker.session.httponly = true
389 403 ## Path to use for the cookie. Set to prefix if you use prefix middleware
390 404 #beaker.session.cookie_path = /custom_prefix
391 405
392 406 ## uncomment for https secure cookie
393 407 beaker.session.secure = false
394 408
395 409 ## auto save the session to not to use .save()
396 410 beaker.session.auto = false
397 411
398 412 ## default cookie expiration time in seconds, set to `true` to set expire
399 413 ## at browser close
400 414 #beaker.session.cookie_expires = 3600
401 415
402 416 ###################################
403 417 ## SEARCH INDEXING CONFIGURATION ##
404 418 ###################################
405 419 ## Full text search indexer is available in rhodecode-tools under
406 420 ## `rhodecode-tools index` command
407 421
408 422 ## WHOOSH Backend, doesn't require additional services to run
409 423 ## it works good with few dozen repos
410 424 search.module = rhodecode.lib.index.whoosh
411 425 search.location = %(here)s/data/index
412 426
413 427 ########################################
414 428 ### CHANNELSTREAM CONFIG ####
415 429 ########################################
416 430 ## channelstream enables persistent connections and live notification
417 431 ## in the system. It's also used by the chat system
418 432 channelstream.enabled = false
419 433
420 434 ## server address for channelstream server on the backend
421 435 channelstream.server = 127.0.0.1:9800
422 436
423 437 ## location of the channelstream server from outside world
424 438 ## use ws:// for http or wss:// for https. This address needs to be handled
425 439 ## by external HTTP server such as Nginx or Apache
426 440 ## see nginx/apache configuration examples in our docs
427 441 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
428 442 channelstream.secret = secret
429 443 channelstream.history.location = %(here)s/channelstream_history
430 444
431 445 ## Internal application path that Javascript uses to connect into.
432 446 ## If you use proxy-prefix the prefix should be added before /_channelstream
433 447 channelstream.proxy_path = /_channelstream
434 448
435 449
436 450 ###################################
437 451 ## APPENLIGHT CONFIG ##
438 452 ###################################
439 453
440 454 ## Appenlight is tailored to work with RhodeCode, see
441 455 ## http://appenlight.com for details how to obtain an account
442 456
443 457 ## appenlight integration enabled
444 458 appenlight = false
445 459
446 460 appenlight.server_url = https://api.appenlight.com
447 461 appenlight.api_key = YOUR_API_KEY
448 462 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
449 463
450 464 # used for JS client
451 465 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
452 466
453 467 ## TWEAK AMOUNT OF INFO SENT HERE
454 468
455 469 ## enables 404 error logging (default False)
456 470 appenlight.report_404 = false
457 471
458 472 ## time in seconds after request is considered being slow (default 1)
459 473 appenlight.slow_request_time = 1
460 474
461 475 ## record slow requests in application
462 476 ## (needs to be enabled for slow datastore recording and time tracking)
463 477 appenlight.slow_requests = true
464 478
465 479 ## enable hooking to application loggers
466 480 appenlight.logging = true
467 481
468 482 ## minimum log level for log capture
469 483 appenlight.logging.level = WARNING
470 484
471 485 ## send logs only from erroneous/slow requests
472 486 ## (saves API quota for intensive logging)
473 487 appenlight.logging_on_error = false
474 488
475 489 ## list of additonal keywords that should be grabbed from environ object
476 490 ## can be string with comma separated list of words in lowercase
477 491 ## (by default client will always send following info:
478 492 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
479 493 ## start with HTTP* this list be extended with additional keywords here
480 494 appenlight.environ_keys_whitelist =
481 495
482 496 ## list of keywords that should be blanked from request object
483 497 ## can be string with comma separated list of words in lowercase
484 498 ## (by default client will always blank keys that contain following words
485 499 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
486 500 ## this list be extended with additional keywords set here
487 501 appenlight.request_keys_blacklist =
488 502
489 503 ## list of namespaces that should be ignores when gathering log entries
490 504 ## can be string with comma separated list of namespaces
491 505 ## (by default the client ignores own entries: appenlight_client.client)
492 506 appenlight.log_namespace_blacklist =
493 507
494 508
495 509 ################################################################################
496 510 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
497 511 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
498 512 ## execute malicious code after an exception is raised. ##
499 513 ################################################################################
500 514 #set debug = false
501 515
502 516
503 517 ##############
504 518 ## STYLING ##
505 519 ##############
506 520 debug_style = true
507 521
508 522 ###########################################
509 523 ### MAIN RHODECODE DATABASE CONFIG ###
510 524 ###########################################
511 525 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
512 526 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
513 527 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
514 528 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
515 529
516 530 # see sqlalchemy docs for other advanced settings
517 531
518 532 ## print the sql statements to output
519 533 sqlalchemy.db1.echo = false
520 534 ## recycle the connections after this amount of seconds
521 535 sqlalchemy.db1.pool_recycle = 3600
522 536 sqlalchemy.db1.convert_unicode = true
523 537
524 538 ## the number of connections to keep open inside the connection pool.
525 539 ## 0 indicates no limit
526 540 #sqlalchemy.db1.pool_size = 5
527 541
528 542 ## the number of connections to allow in connection pool "overflow", that is
529 543 ## connections that can be opened above and beyond the pool_size setting,
530 544 ## which defaults to five.
531 545 #sqlalchemy.db1.max_overflow = 10
532 546
533 547
534 548 ##################
535 549 ### VCS CONFIG ###
536 550 ##################
537 551 vcs.server.enable = true
538 552 vcs.server = localhost:9900
539 553
540 554 ## Web server connectivity protocol, responsible for web based VCS operatations
541 555 ## Available protocols are:
542 556 ## `http` - use http-rpc backend (default)
543 557 vcs.server.protocol = http
544 558
545 559 ## Push/Pull operations protocol, available options are:
546 560 ## `http` - use http-rpc backend (default)
547 561 ##
548 562 vcs.scm_app_implementation = http
549 563
550 564 ## Push/Pull operations hooks protocol, available options are:
551 565 ## `http` - use http-rpc backend (default)
552 566 vcs.hooks.protocol = http
553 567
554 568 vcs.server.log_level = debug
555 569 ## Start VCSServer with this instance as a subprocess, usefull for development
556 570 vcs.start_server = true
557 571
558 572 ## List of enabled VCS backends, available options are:
559 573 ## `hg` - mercurial
560 574 ## `git` - git
561 575 ## `svn` - subversion
562 576 vcs.backends = hg, git, svn
563 577
564 578 vcs.connection_timeout = 3600
565 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 581 #vcs.svn.compatible_version = pre-1.8-compatible
568 582
569 583
570 584 ############################################################
571 585 ### Subversion proxy support (mod_dav_svn) ###
572 586 ### Maps RhodeCode repo groups into SVN paths for Apache ###
573 587 ############################################################
574 588 ## Enable or disable the config file generation.
575 589 svn.proxy.generate_config = false
576 590 ## Generate config file with `SVNListParentPath` set to `On`.
577 591 svn.proxy.list_parent_path = true
578 592 ## Set location and file name of generated config file.
579 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 596 ## Used as a prefix to the `Location` block in the generated config file.
581 597 ## In most cases it should be set to `/`.
582 598 svn.proxy.location_root = /
583 599 ## Command to reload the mod dav svn configuration on change.
584 600 ## Example: `/etc/init.d/apache2 reload`
585 601 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
586 602 ## If the timeout expires before the reload command finishes, the command will
587 603 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
588 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 643 ## Dummy marker to add new entries after.
591 644 ## Add any custom entries below. Please don't remove.
592 645 custom.conf = 1
593 646
594 647
595 648 ################################
596 649 ### LOGGING CONFIGURATION ####
597 650 ################################
598 651 [loggers]
599 keys = root, routes, rhodecode, sqlalchemy, beaker, templates
652 keys = root, sqlalchemy, beaker, rhodecode, ssh_wrapper
600 653
601 654 [handlers]
602 655 keys = console, console_sql
603 656
604 657 [formatters]
605 658 keys = generic, color_formatter, color_formatter_sql
606 659
607 660 #############
608 661 ## LOGGERS ##
609 662 #############
610 663 [logger_root]
611 664 level = NOTSET
612 665 handlers = console
613 666
614 [logger_routes]
615 level = DEBUG
616 handlers =
617 qualname = routes.middleware
618 ## "level = DEBUG" logs the route matched and routing variables.
619 propagate = 1
667 [logger_sqlalchemy]
668 level = INFO
669 handlers = console_sql
670 qualname = sqlalchemy.engine
671 propagate = 0
620 672
621 673 [logger_beaker]
622 674 level = DEBUG
623 675 handlers =
624 676 qualname = beaker.container
625 677 propagate = 1
626 678
627 [logger_templates]
628 level = INFO
629 handlers =
630 qualname = pylons.templating
631 propagate = 1
632
633 679 [logger_rhodecode]
634 680 level = DEBUG
635 681 handlers =
636 682 qualname = rhodecode
637 683 propagate = 1
638 684
639 [logger_sqlalchemy]
640 level = INFO
641 handlers = console_sql
642 qualname = sqlalchemy.engine
643 propagate = 0
685 [logger_ssh_wrapper]
686 level = DEBUG
687 handlers =
688 qualname = ssh_wrapper
689 propagate = 1
690
644 691
645 692 ##############
646 693 ## HANDLERS ##
647 694 ##############
648 695
649 696 [handler_console]
650 697 class = StreamHandler
651 698 args = (sys.stderr, )
652 699 level = DEBUG
653 700 formatter = color_formatter
654 701
655 702 [handler_console_sql]
656 703 class = StreamHandler
657 704 args = (sys.stderr, )
658 705 level = DEBUG
659 706 formatter = color_formatter_sql
660 707
661 708 ################
662 709 ## FORMATTERS ##
663 710 ################
664 711
665 712 [formatter_generic]
666 713 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
667 714 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
668 715 datefmt = %Y-%m-%d %H:%M:%S
669 716
670 717 [formatter_color_formatter]
671 718 class = rhodecode.lib.logging_formatter.ColorFormatter
672 719 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
673 720 datefmt = %Y-%m-%d %H:%M:%S
674 721
675 722 [formatter_color_formatter_sql]
676 723 class = rhodecode.lib.logging_formatter.ColorFormatterSql
677 724 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
678 725 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,90 +1,113 b''
1 1 """
2 2 gunicorn config extension and hooks. Sets additional configuration that is
3 3 available post the .ini config.
4 4
5 5 - workers = ${cpu_number}
6 6 - threads = 1
7 7 - proc_name = ${gunicorn_proc_name}
8 8 - worker_class = sync
9 9 - worker_connections = 10
10 10 - max_requests = 1000
11 11 - max_requests_jitter = 30
12 12 - timeout = 21600
13 13
14 14 """
15 15
16 16 import multiprocessing
17 17 import sys
18 import time
19 import datetime
18 20 import threading
19 21 import traceback
22 from gunicorn.glogging import Logger
20 23
21 24
22 25 # GLOBAL
23 26 errorlog = '-'
24 27 accesslog = '-'
25 28 loglevel = 'debug'
26 29
27 30 # SECURITY
28 31 limit_request_line = 4094
29 32 limit_request_fields = 100
30 33 limit_request_field_size = 8190
31 34
32 35 # SERVER MECHANICS
33 36 # None == system temp dir
34 37 worker_tmp_dir = None
35 38 tmp_upload_dir = None
36 39
37 40 # Custom log format
38 41 access_log_format = (
39 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 44 # self adjust workers based on CPU count
42 45 # workers = multiprocessing.cpu_count() * 2 + 1
43 46
44 47
45 48 def post_fork(server, worker):
46 49 server.log.info("[<%-10s>] WORKER spawned", worker.pid)
47 50
48 51
49 52 def pre_fork(server, worker):
50 53 pass
51 54
52 55
53 56 def pre_exec(server):
54 57 server.log.info("Forked child, re-executing.")
55 58
56 59
57 60 def when_ready(server):
58 61 server.log.info("Server is ready. Spawning workers")
59 62
60 63
61 64 def worker_int(worker):
62 65 worker.log.info("[<%-10s>] worker received INT or QUIT signal", worker.pid)
63 66
64 67 # get traceback info, on worker crash
65 68 id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
66 69 code = []
67 70 for thread_id, stack in sys._current_frames().items():
68 71 code.append(
69 72 "\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), thread_id))
70 73 for fname, lineno, name, line in traceback.extract_stack(stack):
71 74 code.append('File: "%s", line %d, in %s' % (fname, lineno, name))
72 75 if line:
73 76 code.append(" %s" % (line.strip()))
74 77 worker.log.debug("\n".join(code))
75 78
76 79
77 80 def worker_abort(worker):
78 81 worker.log.info("[<%-10s>] worker received SIGABRT signal", worker.pid)
79 82
80 83
81 84 def pre_request(worker, req):
82 85 return
83 86 worker.log.debug("[<%-10s>] PRE WORKER: %s %s",
84 87 worker.pid, req.method, req.path)
85 88
86 89
87 90 def post_request(worker, req, environ, resp):
88 91 return
89 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 4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
5 5 # The %(here)s variable will be replaced with the parent directory of this file#
6 6 ################################################################################
7 7
8 8 [DEFAULT]
9 9 debug = true
10 10
11 11 ################################################################################
12 12 ## EMAIL CONFIGURATION ##
13 13 ## Uncomment and replace with the email address which should receive ##
14 14 ## any error reports after an application crash ##
15 15 ## Additionally these settings will be used by the RhodeCode mailing system ##
16 16 ################################################################################
17 17
18 18 ## prefix all emails subjects with given prefix, helps filtering out emails
19 19 #email_prefix = [RhodeCode]
20 20
21 21 ## email FROM address all mails will be sent
22 22 #app_email_from = rhodecode-noreply@localhost
23 23
24 24 ## Uncomment and replace with the address which should receive any error report
25 25 ## note: using appenlight for error handling doesn't need this to be uncommented
26 26 #email_to = admin@localhost
27 27
28 28 ## in case of Application errors, sent an error email form
29 29 #error_email_from = rhodecode_error@localhost
30 30
31 31 ## additional error message to be send in case of server crash
32 32 #error_message =
33 33
34 34
35 35 #smtp_server = mail.server.com
36 36 #smtp_username =
37 37 #smtp_password =
38 38 #smtp_port =
39 39 #smtp_use_tls = false
40 40 #smtp_use_ssl = true
41 41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
42 42 #smtp_auth =
43 43
44 44 [server:main]
45 45 ## COMMON ##
46 46 host = 127.0.0.1
47 47 port = 5000
48 48
49 49 ##################################
50 50 ## WAITRESS WSGI SERVER ##
51 51 ## Recommended for Development ##
52 52 ##################################
53 53
54 54 #use = egg:waitress#main
55 55 ## number of worker threads
56 56 #threads = 5
57 57 ## MAX BODY SIZE 100GB
58 58 #max_request_body_size = 107374182400
59 59 ## Use poll instead of select, fixes file descriptors limits problems.
60 60 ## May not work on old windows systems.
61 61 #asyncore_use_poll = true
62 62
63 63
64 64 ##########################
65 65 ## GUNICORN WSGI SERVER ##
66 66 ##########################
67 67 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
68 68
69 69 use = egg:gunicorn#main
70 70 ## Sets the number of process workers. You must set `instance_id = *`
71 71 ## when this option is set to more than one worker, recommended
72 72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
73 73 ## The `instance_id = *` must be set in the [app:main] section below
74 74 workers = 2
75 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 77 #threads = 1
78 78 ## process name
79 79 proc_name = rhodecode
80 80 ## type of worker class, one of sync, gevent
81 81 ## recommended for bigger setup is using of of other than sync one
82 82 worker_class = sync
83 83 ## The maximum number of simultaneous clients. Valid only for Gevent
84 84 #worker_connections = 10
85 85 ## max number of requests that worker will handle before being gracefully
86 86 ## restarted, could prevent memory leaks
87 87 max_requests = 1000
88 88 max_requests_jitter = 30
89 89 ## amount of time a worker can spend with handling a request before it
90 90 ## gets killed and restarted. Set to 6hrs
91 91 timeout = 21600
92 92
93 93
94 94 ## prefix middleware for RhodeCode.
95 95 ## recommended when using proxy setup.
96 96 ## allows to set RhodeCode under a prefix in server.
97 97 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
98 98 ## And set your prefix like: `prefix = /custom_prefix`
99 99 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
100 100 ## to make your cookies only work on prefix url
101 101 [filter:proxy-prefix]
102 102 use = egg:PasteDeploy#prefix
103 103 prefix = /
104 104
105 105 [app:main]
106 106 use = egg:rhodecode-enterprise-ce
107 107
108 108 ## enable proxy prefix middleware, defined above
109 109 #filter-with = proxy-prefix
110 110
111 111 ## encryption key used to encrypt social plugin tokens,
112 112 ## remote_urls with credentials etc, if not set it defaults to
113 113 ## `beaker.session.secret`
114 114 #rhodecode.encrypted_values.secret =
115 115
116 116 ## decryption strict mode (enabled by default). It controls if decryption raises
117 117 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
118 118 #rhodecode.encrypted_values.strict = false
119 119
120 120 ## return gzipped responses from Rhodecode (static files/application)
121 121 gzip_responses = false
122 122
123 123 ## autogenerate javascript routes file on startup
124 124 generate_js_files = false
125 125
126 126 ## Optional Languages
127 127 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
128 128 lang = en
129 129
130 130 ## perform a full repository scan on each server start, this should be
131 131 ## set to false after first startup, to allow faster server restarts.
132 132 startup.import_repos = false
133 133
134 134 ## Uncomment and set this path to use archive download cache.
135 135 ## Once enabled, generated archives will be cached at this location
136 136 ## and served from the cache during subsequent requests for the same archive of
137 137 ## the repository.
138 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 145 ## change this to unique ID for security
141 146 app_instance_uuid = rc-production
142 147
143 ## cut off limit for large diffs (size in bytes)
144 cut_off_limit_diff = 1024000
145 cut_off_limit_file = 256000
148 ## cut off limit for large diffs (size in bytes). If overall diff size on
149 ## commit, or pull request exceeds this limit this diff will be displayed
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 158 ## use cache version of scm repo everywhere
148 159 vcs_full_cache = true
149 160
150 161 ## force https in RhodeCode, fixes https redirects, assumes it's always https
151 162 ## Normally this is controlled by proper http flags sent from http server
152 163 force_https = false
153 164
154 165 ## use Strict-Transport-Security headers
155 166 use_htsts = false
156 167
157 168 ## number of commits stats will parse on each iteration
158 169 commit_parse_limit = 25
159 170
160 171 ## git rev filter option, --all is the default filter, if you need to
161 172 ## hide all refs in changelog switch this to --branches --tags
162 173 git_rev_filter = --branches --tags
163 174
164 175 # Set to true if your repos are exposed using the dumb protocol
165 176 git_update_server_info = false
166 177
167 178 ## RSS/ATOM feed options
168 179 rss_cut_off_limit = 256000
169 180 rss_items_per_page = 10
170 181 rss_include_diff = false
171 182
172 183 ## gist URL alias, used to create nicer urls for gist. This should be an
173 184 ## url that does rewrites to _admin/gists/{gistid}.
174 185 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
175 186 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
176 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 190 ## used for access.
180 191 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
181 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.
184 ## To enable access to raw_files put `FilesController:raw`.
185 ## To enable access to patches add `ChangesetController:changeset_patch`.
197 ## list of all views can be found under `/_admin/permissions/auth_token_access`
186 198 ## The list should be "," separated and on a single line.
187 199 ##
188 ## Recommended controllers to enable:
189 # ChangesetController:changeset_patch,
190 # ChangesetController:changeset_raw,
191 # FilesController:raw,
192 # FilesController:archivefile,
193 # GistsController:*,
200 ## Most common views to enable:
201 # RepoCommitsView:repo_commit_download
202 # RepoCommitsView:repo_commit_patch
203 # RepoCommitsView:repo_commit_raw
204 # RepoCommitsView:repo_commit_raw@TOKEN
205 # RepoFilesView:repo_files_diff
206 # RepoFilesView:repo_archivefile
207 # RepoFilesView:repo_file_raw
208 # GistView:*
194 209 api_access_controllers_whitelist =
195 210
196 211 ## default encoding used to convert from and to unicode
197 212 ## can be also a comma separated list of encoding in case of mixed encodings
198 213 default_encoding = UTF-8
199 214
200 215 ## instance-id prefix
201 216 ## a prefix key for this instance used for cache invalidation when running
202 217 ## multiple instances of rhodecode, make sure it's globally unique for
203 218 ## all running rhodecode instances. Leave empty if you don't use it
204 219 instance_id =
205 220
206 221 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
207 222 ## of an authentication plugin also if it is disabled by it's settings.
208 223 ## This could be useful if you are unable to log in to the system due to broken
209 224 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
210 225 ## module to log in again and fix the settings.
211 226 ##
212 227 ## Available builtin plugin IDs (hash is part of the ID):
213 228 ## egg:rhodecode-enterprise-ce#rhodecode
214 229 ## egg:rhodecode-enterprise-ce#pam
215 230 ## egg:rhodecode-enterprise-ce#ldap
216 231 ## egg:rhodecode-enterprise-ce#jasig_cas
217 232 ## egg:rhodecode-enterprise-ce#headers
218 233 ## egg:rhodecode-enterprise-ce#crowd
219 234 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
220 235
221 236 ## alternative return HTTP header for failed authentication. Default HTTP
222 237 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
223 238 ## handling that causing a series of failed authentication calls.
224 239 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
225 240 ## This will be served instead of default 401 on bad authnetication
226 241 auth_ret_code =
227 242
228 243 ## use special detection method when serving auth_ret_code, instead of serving
229 244 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
230 245 ## and then serve auth_ret_code to clients
231 246 auth_ret_code_detection = false
232 247
233 248 ## locking return code. When repository is locked return this HTTP code. 2XX
234 249 ## codes don't break the transactions while 4XX codes do
235 250 lock_ret_code = 423
236 251
237 252 ## allows to change the repository location in settings page
238 253 allow_repo_location_change = true
239 254
240 255 ## allows to setup custom hooks in settings page
241 256 allow_custom_hooks_settings = true
242 257
243 258 ## generated license token, goto license page in RhodeCode settings to obtain
244 259 ## new token
245 260 license_token =
246 261
247 262 ## supervisor connection uri, for managing supervisor and logs.
248 263 supervisor.uri =
249 264 ## supervisord group name/id we only want this RC instance to handle
250 265 supervisor.group_id = prod
251 266
252 267 ## Display extended labs settings
253 268 labs_settings_active = true
254 269
255 270 ####################################
256 271 ### CELERY CONFIG ####
257 272 ####################################
258 273 use_celery = false
259 274 broker.host = localhost
260 275 broker.vhost = rabbitmqhost
261 276 broker.port = 5672
262 277 broker.user = rabbitmq
263 278 broker.password = qweqwe
264 279
265 280 celery.imports = rhodecode.lib.celerylib.tasks
266 281
267 282 celery.result.backend = amqp
268 283 celery.result.dburi = amqp://
269 284 celery.result.serialier = json
270 285
271 286 #celery.send.task.error.emails = true
272 287 #celery.amqp.task.result.expires = 18000
273 288
274 289 celeryd.concurrency = 2
275 290 #celeryd.log.file = celeryd.log
276 291 celeryd.log.level = debug
277 292 celeryd.max.tasks.per.child = 1
278 293
279 294 ## tasks will never be sent to the queue, but executed locally instead.
280 295 celery.always.eager = false
281 296
282 297 ####################################
283 298 ### BEAKER CACHE ####
284 299 ####################################
285 300 # default cache dir for templates. Putting this into a ramdisk
286 301 ## can boost performance, eg. %(here)s/data_ramdisk
287 302 cache_dir = %(here)s/data
288 303
289 304 ## locking and default file storage for Beaker. Putting this into a ramdisk
290 305 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
291 306 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
292 307 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
293 308
294 309 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
295 310
296 311 beaker.cache.super_short_term.type = memory
297 312 beaker.cache.super_short_term.expire = 10
298 313 beaker.cache.super_short_term.key_length = 256
299 314
300 315 beaker.cache.short_term.type = memory
301 316 beaker.cache.short_term.expire = 60
302 317 beaker.cache.short_term.key_length = 256
303 318
304 319 beaker.cache.long_term.type = memory
305 320 beaker.cache.long_term.expire = 36000
306 321 beaker.cache.long_term.key_length = 256
307 322
308 323 beaker.cache.sql_cache_short.type = memory
309 324 beaker.cache.sql_cache_short.expire = 10
310 325 beaker.cache.sql_cache_short.key_length = 256
311 326
312 327 ## default is memory cache, configure only if required
313 328 ## using multi-node or multi-worker setup
314 329 #beaker.cache.auth_plugins.type = ext:database
315 330 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
316 331 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
317 332 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
318 333 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
319 334 #beaker.cache.auth_plugins.sa.pool_size = 10
320 335 #beaker.cache.auth_plugins.sa.max_overflow = 0
321 336
322 337 beaker.cache.repo_cache_long.type = memorylru_base
323 338 beaker.cache.repo_cache_long.max_items = 4096
324 339 beaker.cache.repo_cache_long.expire = 2592000
325 340
326 341 ## default is memorylru_base cache, configure only if required
327 342 ## using multi-node or multi-worker setup
328 343 #beaker.cache.repo_cache_long.type = ext:memcached
329 344 #beaker.cache.repo_cache_long.url = localhost:11211
330 345 #beaker.cache.repo_cache_long.expire = 1209600
331 346 #beaker.cache.repo_cache_long.key_length = 256
332 347
333 348 ####################################
334 349 ### BEAKER SESSION ####
335 350 ####################################
336 351
337 352 ## .session.type is type of storage options for the session, current allowed
338 353 ## types are file, ext:memcached, ext:database, and memory (default).
339 354 beaker.session.type = file
340 355 beaker.session.data_dir = %(here)s/data/sessions/data
341 356
342 357 ## db based session, fast, and allows easy management over logged in users
343 358 #beaker.session.type = ext:database
344 359 #beaker.session.table_name = db_session
345 360 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
346 361 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
347 362 #beaker.session.sa.pool_recycle = 3600
348 363 #beaker.session.sa.echo = false
349 364
350 365 beaker.session.key = rhodecode
351 366 beaker.session.secret = production-rc-uytcxaz
352 367 beaker.session.lock_dir = %(here)s/data/sessions/lock
353 368
354 369 ## Secure encrypted cookie. Requires AES and AES python libraries
355 370 ## you must disable beaker.session.secret to use this
356 371 #beaker.session.encrypt_key = key_for_encryption
357 372 #beaker.session.validate_key = validation_key
358 373
359 374 ## sets session as invalid(also logging out user) if it haven not been
360 375 ## accessed for given amount of time in seconds
361 376 beaker.session.timeout = 2592000
362 377 beaker.session.httponly = true
363 378 ## Path to use for the cookie. Set to prefix if you use prefix middleware
364 379 #beaker.session.cookie_path = /custom_prefix
365 380
366 381 ## uncomment for https secure cookie
367 382 beaker.session.secure = false
368 383
369 384 ## auto save the session to not to use .save()
370 385 beaker.session.auto = false
371 386
372 387 ## default cookie expiration time in seconds, set to `true` to set expire
373 388 ## at browser close
374 389 #beaker.session.cookie_expires = 3600
375 390
376 391 ###################################
377 392 ## SEARCH INDEXING CONFIGURATION ##
378 393 ###################################
379 394 ## Full text search indexer is available in rhodecode-tools under
380 395 ## `rhodecode-tools index` command
381 396
382 397 ## WHOOSH Backend, doesn't require additional services to run
383 398 ## it works good with few dozen repos
384 399 search.module = rhodecode.lib.index.whoosh
385 400 search.location = %(here)s/data/index
386 401
387 402 ########################################
388 403 ### CHANNELSTREAM CONFIG ####
389 404 ########################################
390 405 ## channelstream enables persistent connections and live notification
391 406 ## in the system. It's also used by the chat system
392 407 channelstream.enabled = false
393 408
394 409 ## server address for channelstream server on the backend
395 410 channelstream.server = 127.0.0.1:9800
396 411
397 412 ## location of the channelstream server from outside world
398 413 ## use ws:// for http or wss:// for https. This address needs to be handled
399 414 ## by external HTTP server such as Nginx or Apache
400 415 ## see nginx/apache configuration examples in our docs
401 416 channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
402 417 channelstream.secret = secret
403 418 channelstream.history.location = %(here)s/channelstream_history
404 419
405 420 ## Internal application path that Javascript uses to connect into.
406 421 ## If you use proxy-prefix the prefix should be added before /_channelstream
407 422 channelstream.proxy_path = /_channelstream
408 423
409 424
410 425 ###################################
411 426 ## APPENLIGHT CONFIG ##
412 427 ###################################
413 428
414 429 ## Appenlight is tailored to work with RhodeCode, see
415 430 ## http://appenlight.com for details how to obtain an account
416 431
417 432 ## appenlight integration enabled
418 433 appenlight = false
419 434
420 435 appenlight.server_url = https://api.appenlight.com
421 436 appenlight.api_key = YOUR_API_KEY
422 437 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
423 438
424 439 # used for JS client
425 440 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
426 441
427 442 ## TWEAK AMOUNT OF INFO SENT HERE
428 443
429 444 ## enables 404 error logging (default False)
430 445 appenlight.report_404 = false
431 446
432 447 ## time in seconds after request is considered being slow (default 1)
433 448 appenlight.slow_request_time = 1
434 449
435 450 ## record slow requests in application
436 451 ## (needs to be enabled for slow datastore recording and time tracking)
437 452 appenlight.slow_requests = true
438 453
439 454 ## enable hooking to application loggers
440 455 appenlight.logging = true
441 456
442 457 ## minimum log level for log capture
443 458 appenlight.logging.level = WARNING
444 459
445 460 ## send logs only from erroneous/slow requests
446 461 ## (saves API quota for intensive logging)
447 462 appenlight.logging_on_error = false
448 463
449 464 ## list of additonal keywords that should be grabbed from environ object
450 465 ## can be string with comma separated list of words in lowercase
451 466 ## (by default client will always send following info:
452 467 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
453 468 ## start with HTTP* this list be extended with additional keywords here
454 469 appenlight.environ_keys_whitelist =
455 470
456 471 ## list of keywords that should be blanked from request object
457 472 ## can be string with comma separated list of words in lowercase
458 473 ## (by default client will always blank keys that contain following words
459 474 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
460 475 ## this list be extended with additional keywords set here
461 476 appenlight.request_keys_blacklist =
462 477
463 478 ## list of namespaces that should be ignores when gathering log entries
464 479 ## can be string with comma separated list of namespaces
465 480 ## (by default the client ignores own entries: appenlight_client.client)
466 481 appenlight.log_namespace_blacklist =
467 482
468 483
469 484 ################################################################################
470 485 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
471 486 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
472 487 ## execute malicious code after an exception is raised. ##
473 488 ################################################################################
474 489 set debug = false
475 490
476 491
477 492 ###########################################
478 493 ### MAIN RHODECODE DATABASE CONFIG ###
479 494 ###########################################
480 495 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
481 496 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
482 497 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
483 498 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
484 499
485 500 # see sqlalchemy docs for other advanced settings
486 501
487 502 ## print the sql statements to output
488 503 sqlalchemy.db1.echo = false
489 504 ## recycle the connections after this amount of seconds
490 505 sqlalchemy.db1.pool_recycle = 3600
491 506 sqlalchemy.db1.convert_unicode = true
492 507
493 508 ## the number of connections to keep open inside the connection pool.
494 509 ## 0 indicates no limit
495 510 #sqlalchemy.db1.pool_size = 5
496 511
497 512 ## the number of connections to allow in connection pool "overflow", that is
498 513 ## connections that can be opened above and beyond the pool_size setting,
499 514 ## which defaults to five.
500 515 #sqlalchemy.db1.max_overflow = 10
501 516
502 517
503 518 ##################
504 519 ### VCS CONFIG ###
505 520 ##################
506 521 vcs.server.enable = true
507 522 vcs.server = localhost:9900
508 523
509 524 ## Web server connectivity protocol, responsible for web based VCS operatations
510 525 ## Available protocols are:
511 526 ## `http` - use http-rpc backend (default)
512 527 vcs.server.protocol = http
513 528
514 529 ## Push/Pull operations protocol, available options are:
515 530 ## `http` - use http-rpc backend (default)
516 531 ##
517 532 vcs.scm_app_implementation = http
518 533
519 534 ## Push/Pull operations hooks protocol, available options are:
520 535 ## `http` - use http-rpc backend (default)
521 536 vcs.hooks.protocol = http
522 537
523 538 vcs.server.log_level = info
524 539 ## Start VCSServer with this instance as a subprocess, usefull for development
525 540 vcs.start_server = false
526 541
527 542 ## List of enabled VCS backends, available options are:
528 543 ## `hg` - mercurial
529 544 ## `git` - git
530 545 ## `svn` - subversion
531 546 vcs.backends = hg, git, svn
532 547
533 548 vcs.connection_timeout = 3600
534 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 551 #vcs.svn.compatible_version = pre-1.8-compatible
537 552
538 553
539 554 ############################################################
540 555 ### Subversion proxy support (mod_dav_svn) ###
541 556 ### Maps RhodeCode repo groups into SVN paths for Apache ###
542 557 ############################################################
543 558 ## Enable or disable the config file generation.
544 559 svn.proxy.generate_config = false
545 560 ## Generate config file with `SVNListParentPath` set to `On`.
546 561 svn.proxy.list_parent_path = true
547 562 ## Set location and file name of generated config file.
548 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 566 ## Used as a prefix to the `Location` block in the generated config file.
550 567 ## In most cases it should be set to `/`.
551 568 svn.proxy.location_root = /
552 569 ## Command to reload the mod dav svn configuration on change.
553 570 ## Example: `/etc/init.d/apache2 reload`
554 571 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
555 572 ## If the timeout expires before the reload command finishes, the command will
556 573 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
557 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 613 ## Dummy marker to add new entries after.
560 614 ## Add any custom entries below. Please don't remove.
561 615 custom.conf = 1
562 616
563 617
564 618 ################################
565 619 ### LOGGING CONFIGURATION ####
566 620 ################################
567 621 [loggers]
568 keys = root, routes, rhodecode, sqlalchemy, beaker, templates
622 keys = root, sqlalchemy, beaker, rhodecode, ssh_wrapper
569 623
570 624 [handlers]
571 625 keys = console, console_sql
572 626
573 627 [formatters]
574 628 keys = generic, color_formatter, color_formatter_sql
575 629
576 630 #############
577 631 ## LOGGERS ##
578 632 #############
579 633 [logger_root]
580 634 level = NOTSET
581 635 handlers = console
582 636
583 [logger_routes]
584 level = DEBUG
585 handlers =
586 qualname = routes.middleware
587 ## "level = DEBUG" logs the route matched and routing variables.
588 propagate = 1
637 [logger_sqlalchemy]
638 level = INFO
639 handlers = console_sql
640 qualname = sqlalchemy.engine
641 propagate = 0
589 642
590 643 [logger_beaker]
591 644 level = DEBUG
592 645 handlers =
593 646 qualname = beaker.container
594 647 propagate = 1
595 648
596 [logger_templates]
597 level = INFO
598 handlers =
599 qualname = pylons.templating
600 propagate = 1
601
602 649 [logger_rhodecode]
603 650 level = DEBUG
604 651 handlers =
605 652 qualname = rhodecode
606 653 propagate = 1
607 654
608 [logger_sqlalchemy]
609 level = INFO
610 handlers = console_sql
611 qualname = sqlalchemy.engine
612 propagate = 0
655 [logger_ssh_wrapper]
656 level = DEBUG
657 handlers =
658 qualname = ssh_wrapper
659 propagate = 1
660
613 661
614 662 ##############
615 663 ## HANDLERS ##
616 664 ##############
617 665
618 666 [handler_console]
619 667 class = StreamHandler
620 668 args = (sys.stderr, )
621 669 level = INFO
622 670 formatter = generic
623 671
624 672 [handler_console_sql]
625 673 class = StreamHandler
626 674 args = (sys.stderr, )
627 675 level = WARN
628 676 formatter = generic
629 677
630 678 ################
631 679 ## FORMATTERS ##
632 680 ################
633 681
634 682 [formatter_generic]
635 683 class = rhodecode.lib.logging_formatter.ExceptionAwareFormatter
636 684 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
637 685 datefmt = %Y-%m-%d %H:%M:%S
638 686
639 687 [formatter_color_formatter]
640 688 class = rhodecode.lib.logging_formatter.ColorFormatter
641 689 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
642 690 datefmt = %Y-%m-%d %H:%M:%S
643 691
644 692 [formatter_color_formatter_sql]
645 693 class = rhodecode.lib.logging_formatter.ColorFormatterSql
646 694 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
647 695 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,90 +1,103 b''
1 1 .. _apache-conf-eg:
2 2
3 3 Apache Configuration Example
4 4 ----------------------------
5 5
6 6 Use the following example to configure Apache as a your web server.
7 7 Below config if for an Apache Reverse Proxy configuration.
8 8
9 9 .. note::
10 10
11 11 Apache requires the following modules to be enabled. Below is an example
12 12 how to enable them on Ubuntu Server
13 13
14 14
15 15 .. code-block:: bash
16 16
17 17 $ sudo a2enmod proxy
18 18 $ sudo a2enmod proxy_http
19 19 $ sudo a2enmod proxy_balancer
20 20 $ sudo a2enmod headers
21 21 $ sudo a2enmod ssl
22 22 $ sudo a2enmod rewrite
23 23
24 24 # requires Apache 2.4+, required to handle websockets/channelstream
25 25 $ sudo a2enmod proxy_wstunnel
26 26
27 27
28 28 .. code-block:: apache
29 29
30 30 ## HTTP to HTTPS rewrite
31 31 <VirtualHost *:80>
32 32 ServerName rhodecode.myserver.com
33 33 DocumentRoot /var/www/html
34 34 Redirect permanent / https://rhodecode.myserver.com/
35 35 </VirtualHost>
36 36
37 37 ## MAIN SSL enabled server
38 38 <VirtualHost *:443>
39 39
40 40 ServerName rhodecode.myserver.com
41 41 ServerAlias rhodecode.myserver.com
42 42
43 ## Skip ProxyPass the _static to backend server
44 #ProxyPass /_static !
45
43 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 55 RequestHeader set X-Forwarded-Proto "https"
47 56
48 57 ## channelstream websocket handling
49 58 ProxyPass /_channelstream ws://localhost:9800
50 59 ProxyPassReverse /_channelstream ws://localhost:9800
51 60
52 61 <Proxy *>
53 62 Order allow,deny
54 63 Allow from all
55 64 </Proxy>
56 65
57 66 # Directive to properly generate url (clone url) for RhodeCode
58 67 ProxyPreserveHost On
59 68
60 69 # Url to running RhodeCode instance. This is shown as `- URL:` when
61 70 # running rccontrol status.
62 71 ProxyPass / http://127.0.0.1:10002/ timeout=7200 Keepalive=On
63 72 ProxyPassReverse / http://127.0.0.1:10002/
64 73
65 74 # Increase headers for large Mercurial headers
66 75 LimitRequestLine 16380
67 76
68 77 # strict http prevents from https -> http downgrade
69 78 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
70 79
71 80 # Set x-frame options
72 81 Header always append X-Frame-Options SAMEORIGIN
73 82
74 83 # To enable https use line below
75 84 # SetEnvIf X-Url-Scheme https HTTPS=1
76 85
77 86 # SSL setup
78 87 SSLEngine On
79 88 SSLCertificateFile /etc/apache2/ssl/rhodecode.myserver.pem
80 89 SSLCertificateKeyFile /etc/apache2/ssl/rhodecode.myserver.key
81 90
82 91 SSLProtocol all -SSLv2 -SSLv3
83 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 93 SSLHonorCipherOrder on
85 94
86 95 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
87 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 102 </VirtualHost>
90 103
@@ -1,135 +1,143 b''
1 1 Nginx Configuration Example
2 2 ---------------------------
3 3
4 4 Use the following example to configure Nginx as a your web server.
5 5
6 6
7 7 .. code-block:: nginx
8 8
9 9 ## rate limiter for certain pages to prevent brute force attacks
10 10 limit_req_zone $binary_remote_addr zone=dl_limit:10m rate=1r/s;
11 11
12 12 ## custom log format
13 13 log_format log_custom '$remote_addr - $remote_user [$time_local] '
14 14 '"$request" $status $body_bytes_sent '
15 15 '"$http_referer" "$http_user_agent" '
16 16 '$request_time $upstream_response_time $pipe';
17 17
18 18 ## define upstream (local RhodeCode instance) to connect to
19 19 upstream rc {
20 20 # Url to running RhodeCode instance.
21 21 # This is shown as `- URL:` in output from rccontrol status.
22 22 server 127.0.0.1:10002;
23 23
24 24 # add more instances for load balancing
25 25 # server 127.0.0.1:10003;
26 26 # server 127.0.0.1:10004;
27 27 }
28 28
29 29 ## HTTP to HTTPS rewrite
30 30 server {
31 31 listen 80;
32 32 server_name rhodecode.myserver.com;
33 33
34 34 if ($http_host = rhodecode.myserver.com) {
35 35 rewrite (.*) https://rhodecode.myserver.com$1 permanent;
36 36 }
37 37 }
38 38
39 39 ## Optional gist alias server, for serving nicer GIST urls.
40 40 server {
41 41 listen 443;
42 42 server_name gist.myserver.com;
43 43 access_log /var/log/nginx/gist.access.log log_custom;
44 44 error_log /var/log/nginx/gist.error.log;
45 45
46 46 ssl on;
47 47 ssl_certificate gist.rhodecode.myserver.com.crt;
48 48 ssl_certificate_key gist.rhodecode.myserver.com.key;
49 49
50 50 ssl_session_timeout 5m;
51 51
52 52 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
53 53 ssl_prefer_server_ciphers on;
54 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 56 # strict http prevents from https -> http downgrade
57 57 add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
58 58
59 59 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
60 60 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
61 61
62 62 rewrite ^/(.+)$ https://rhodecode.myserver.com/_admin/gists/$1;
63 63 rewrite (.*) https://rhodecode.myserver.com/_admin/gists;
64 64 }
65 65
66 66
67 67 ## MAIN SSL enabled server
68 68 server {
69 69 listen 443 ssl;
70 70 server_name rhodecode.myserver.com;
71 71
72 72 access_log /var/log/nginx/rhodecode.access.log log_custom;
73 73 error_log /var/log/nginx/rhodecode.error.log;
74 74
75 75 ssl on;
76 76 ssl_certificate rhodecode.myserver.com.crt;
77 77 ssl_certificate_key rhodecode.myserver.com.key;
78 78
79 79 ssl_session_timeout 5m;
80 80
81 81 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
82 82 ssl_prefer_server_ciphers on;
83 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 85 # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
86 86 #ssl_dhparam /etc/nginx/ssl/dhparam.pem;
87 87
88 88 include /etc/nginx/proxy.conf;
89 89
90 90 ## serve static files by Nginx, recommended for performance
91 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 99 # alias /path/to/.rccontrol/enterprise-1/static;
93 100 # }
94 101
95 102 ## channelstream websocket handling
96 103 location /_channelstream {
97 104 rewrite /_channelstream/(.*) /$1 break;
98 105
99 106 proxy_pass http://127.0.0.1:9800;
100 107
101 108 proxy_connect_timeout 10;
102 109 proxy_send_timeout 10m;
103 110 proxy_read_timeout 10m;
104 111 tcp_nodelay off;
105 112 proxy_set_header Host $host;
106 113 proxy_set_header X-Real-IP $remote_addr;
107 114 proxy_set_header X-Url-Scheme $scheme;
108 115 proxy_set_header X-Forwarded-Proto $scheme;
109 116 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
110 117 gzip off;
111 118 proxy_http_version 1.1;
112 119 proxy_set_header Upgrade $http_upgrade;
113 120 proxy_set_header Connection "upgrade";
114 121 }
115 122
116 123 location /_admin/login {
117 124 ## rate limit this endpoint
118 125 limit_req zone=dl_limit burst=10 nodelay;
119 126 try_files $uri @rhode;
120 127 }
121 128
122 129 location / {
123 130 try_files $uri @rhode;
124 131 }
125 132
126 133 location @rhode {
127 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 139 error_page 502 /502.html;
132 140 location = /502.html {
133 141 root /path/to/.rccontrol/enterprise-1/static;
134 142 }
135 143 } No newline at end of file
@@ -1,30 +1,31 b''
1 1 .. _rhodecode-admin-ref:
2 2
3 3 System Administration
4 4 =====================
5 5
6 6 The following are the most common system administration tasks.
7 7
8 8 .. only:: latex
9 9
10 10 * :ref:`vcs-server`
11 11 * :ref:`apache-ws-ref`
12 12 * :ref:`nginx-ws-ref`
13 13 * :ref:`rhodecode-tuning-ref`
14 14 * :ref:`indexing-ref`
15 15 * :ref:`rhodecode-reset-ref`
16 16
17 17 .. toctree::
18 18
19 19 config-files-overview
20 20 vcs-server
21 21 svn-http
22 gunicorn-ssl-support
22 23 apache-config
23 24 nginx-config
24 25 backup-restore
25 26 tuning-rhodecode
26 27 indexing
27 28 reset-information
28 29 enable-debug
29 30 admin-tricks
30 31 cleanup-cmds
@@ -1,111 +1,124 b''
1 1 .. _increase-gunicorn:
2 2
3 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
9 increase the threadpool size of the VCS Server. The recommended size is
10 6 times the number of Gunicorn workers. To set this, see
11 :ref:`vcs-server-config-file`.
10 To improve |RCE| performance you can increase the number of `Gunicorn`_ workers.
11 This allows to handle more connections concurently, and provide better
12 responsiveness and performance.
12 13
13 |RCE| comes with `Gunicorn`_ packaged in its Nix environment. To improve
14 performance you can increase the number of workers. To do this, use the
15 following steps:
14 By default during installation |RCC| tries to detect how many CPUs are
15 available in the system, and set the number workers based on that information.
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 20 1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
18 21 2. In the ``[server:main]`` section, increase the number of Gunicorn
19 22 ``workers`` using the following formula :math:`(2 * Cores) + 1`.
20 23
21 24 .. code-block:: ini
22 25
23 [server:main]
24 host = 127.0.0.1
25 port = 10002
26 26 use = egg:gunicorn#main
27 workers = 1
28 threads = 1
29 proc_name = RhodeCodeEnterprise
27 ## Sets the number of process workers. You must set `instance_id = *`
28 ## when this option is set to more than one worker, recommended
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 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 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 47 3. In the ``[app:main]`` section, set the ``instance_id`` property to ``*``.
35 48
36 49 .. code-block:: ini
37 50
38 51 # In the [app:main] section
39 52 [app:main]
40 53 # You must set `instance_id = *`
41 54 instance_id = *
42 55
43 4. Save your changes.
44 5. Restart your |RCE| instance, using the following command:
56 4. Change the VCSServer workers too. Open the
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 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
51 needs to store its data on a shared disk, preferably together with your
52 |repos|. This data directory contains template caches, a whoosh index,
53 and is used for task locking to ensure safety across multiple instances.
54 To do this, set the following properties in the :file:`rhodecode.ini` file to
55 set the shared location across all |RCM| instances.
94 Gevent is an asynchronous worker type for Gunicorn. It allows accepting multiple
95 connections on a single `Gunicorn`_ worker. This means you can handle 100s
96 of concurrent clones, or API calls using just few workers. A setting called
97 `worker_connections` defines on how many connections each worker can
98 handle using `Gevent`.
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 108 .. code-block:: ini
58 109
59 cache_dir = /file/path # set to shared location
60 search.location = /file/path # set to shared location
110 ## type of worker class, one of sync, gevent
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 ####################################
63 ### BEAKER CACHE ####
64 ####################################
65 beaker.cache.data_dir = /file/path # set to shared location
66 beaker.cache.lock_dir = /file/path # set to shared location
116
117 .. note::
118
119 `Gevent` is currently only supported for Enterprise/Community instances.
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 124 .. _Gunicorn: http://gunicorn.org/
111 .. _Gunicorn SSL Docs: http://docs.gunicorn.org/en/stable/settings.html#ssl
@@ -1,42 +1,51 b''
1 1 .. _data-mem:
2 2
3 3 Mount Cache Folders To Memory
4 4 -----------------------------
5 5
6 6 To increase the performance of folders containing cache data, you can mount
7 7 them to memory. The following folders specified in the :file:`rhodecode.ini`
8 8 file would benefit from this.
9 9
10 10 .. code-block:: ini
11 11
12 12 cache_dir = %(here)s/data
13 13 search.location = %(here)s/data/index
14 14
15 15 Use the following Ubuntu example to mount these to memory, or see your
16 16 particular |os| instructions. The expected performance benefit is
17 17 approximately 5%. You should ensure you allocate an adequate amount of memory
18 18 depending on your available resources.
19 19
20 20 .. code-block:: bash
21 21
22 22 # mount to memory with 2GB limit and 755 write permissions
23 23 mount -t tmpfs -o size=2G,mode=0755 tmpfs /home/user/.rccontrol/enterprise-1/data
24 24 mount -t tmpfs -o size=2G,mode=0755 tmpfs /home/user/.rccontrol/enterprise-1/data/index
25 25
26 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 37 Move ``tmp`` to TMPFS
29 38 ---------------------
30 39
31 40 |RCE| components heavily use the :file:`/tmp` folder, so moving your
32 41 :file:`/tmp` folder into to a RAM-based TMPS can lead to a noticeable
33 42 performance boost.
34 43
35 44 .. code-block:: bash
36 45
37 46 # mount tmp to memory with 2GB limit and 1777 write permissions
38 47 mount -t tmpfs -o size=2G,mode=1777 tmpfs /tmp
39 48
40 49 For more information about TMPFS, see the documentation `here`_.
41 50
42 51 .. _here: https://wiki.archlinux.org/index.php/Tmpfs
@@ -1,51 +1,58 b''
1 1 .. _scale-horizontal:
2 2
3 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 13 Horizontal scaling means adding more machines or workers into your pool of
7 14 resources. Horizontally scaling |RCE| gives a huge performance increase,
8 15 especially under large traffic scenarios with a high number of requests. This
9 16 is very beneficial when |RCE| is serving many users simultaneously,
10 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,
15 set ``instance_id = *``. This enables |RCE| to use multiple nodes.
16 2. Define the number of worker threads using the formula
17 :math:`(2 * Cores) + 1`. For example 4 CPU cores would lead to
18 :math:`(2 * 4) + 1 = 9` workers. In some cases it's ok to increase number of
19 workers even beyond this formula. Generally the more workers, the more
20 simultaneous connections the system can handle.
32 ####################################
33 ### BEAKER CACHE ####
34 ####################################
35 beaker.cache.data_dir = /shared/path/data # set to shared location
36 beaker.cache.lock_dir = /shared/path/lock # set to shared location
37
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 46 It is recommended to create another dedicated |RCE| instance to handle
23 47 traffic from build farms or continuous integration servers.
24 48
25 49 .. note::
26 50
27 51 You should configure your load balancing accordingly. We recommend writing
28 52 load balancing rules that will separate regular user traffic from
29 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 55 .. note::
47 56
48 57 If Celery is used on each instance then you should run separate Celery
49 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 1 .. _api:
2 2
3 3 API Documentation
4 4 =================
5 5
6 6 The |RCE| API uses a single scheme for calling all API methods. The API is
7 7 implemented with JSON protocol in both directions. To send API requests to
8 8 your instance of |RCE|, use the following URL format
9 9 ``<your_server>/_admin``
10 10
11 11 .. note::
12 12
13 13 To use the API, you should configure the :file:`~/.rhoderc` file with
14 14 access details per instance. For more information, see
15 15 :ref:`config-rhoderc`.
16 16
17 17
18 18 API ACCESS FOR WEB VIEWS
19 19 ------------------------
20 20
21 21 API access can also be turned on for each web view in |RCE| that is
22 22 decorated with a `@LoginRequired` decorator. To enable API access, change
23 23 the standard login decorator to `@LoginRequired(api_access=True)`.
24 24
25 25 From |RCM| version 1.7.0 you can configure a white list
26 26 of views that have API access enabled by default. To enable these,
27 27 edit the |RCM| configuration ``.ini`` file. The default location is:
28 28
29 29 * |RCM| Pre-2.2.7 :file:`root/rhodecode/data/production.ini`
30 30 * |RCM| 3.0 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
31 31
32 32 To configure the white list, edit this section of the file. In this
33 33 configuration example, API access is granted to the patch/diff raw file and
34 34 archive.
35 35
36 36 .. code-block:: ini
37 37
38 38 ## List of controllers (using glob syntax) that AUTH TOKENS could be used for access.
39 39 ## Adding ?auth_token = <token> to the url authenticates this request as if it
40 40 ## came from the the logged in user who own this authentication token.
41 41 ##
42 42 ## Syntax is <ControllerClass>:<function_pattern>.
43 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 47 After this change, a |RCE| view can be accessed without login by adding a
48 48 GET parameter ``?auth_token=<auth_token>`` to a url. For example to
49 49 access the raw diff.
50 50
51 51 .. code-block:: html
52 52
53 53 http://<server>/<repo>/changeset-diff/<sha>?auth_token=<auth_token>
54 54
55 55 By default this is only enabled on RSS/ATOM feed views. Exposing raw diffs is a
56 56 good way to integrate with 3rd party services like code review, or build farms
57 57 that could download archives.
58 58
59 59 API ACCESS
60 60 ----------
61 61
62 62 All clients are required to send JSON-RPC spec JSON data.
63 63
64 64 .. code-block:: bash
65 65
66 66 {
67 67 "id:"<id>",
68 68 "auth_token":"<auth_token>",
69 69 "method":"<method_name>",
70 70 "args":{"<arg_key>":"<arg_val>"}
71 71 }
72 72
73 73 Example call for auto pulling from remote repositories using curl:
74 74
75 75 .. code-block:: bash
76 76
77 77 curl https://server.com/_admin/api -X POST -H 'content-type:text/plain' --data-binary '{"id":1,
78 78 "auth_token":"xe7cdb2v278e4evbdf5vs04v832v0efvcbcve4a3","method":"pull", "args":{"repoid":"CPython"}}'
79 79
80 80 Provide those parameters:
81 81 - **id** A value of any type, which is used to match the response with the
82 82 request that it is replying to.
83 83 - **auth_token** for access and permission validation.
84 84 - **method** is name of method to call
85 85 - **args** is an ``key:value`` list of arguments to pass to method
86 86
87 87 .. note::
88 88
89 89 To get your |authtoken|, from the |RCE| interface,
90 90 go to:
91 91 :menuselection:`username --> My account --> Auth tokens`
92 92
93 93 For security reasons you should always create a dedicated |authtoken| for
94 94 API use only.
95 95
96 96
97 97 The |RCE| API will always return a JSON-RPC response:
98 98
99 99 .. code-block:: bash
100 100
101 101 {
102 102 "id": <id>, # matching id sent by request
103 103 "result": "<result>"|null, # JSON formatted result, null if any errors
104 104 "error": "null"|<error_message> # JSON formatted error (if any)
105 105 }
106 106
107 107 All responses from API will be with `HTTP/1.0 200 OK` status code.
108 108 If there is an error when calling the API, the *error* key will contain a
109 109 failure description and the *result* will be `null`.
110 110
111 111 API CLIENT
112 112 ----------
113 113
114 114 To install the |RCE| API, see :ref:`install-tools`. To configure the API per
115 115 instance, see the :ref:`rc-tools` section as you need to configure a
116 116 :file:`~/.rhoderc` file with your |authtokens|.
117 117
118 118 Once you have set up your instance API access, use the following examples to
119 119 get started.
120 120
121 121 .. code-block:: bash
122 122
123 123 # Getting the 'rhodecode' repository
124 124 # from a RhodeCode Enterprise instance
125 125 rhodecode-api --instance-name=enterprise-1 get_repo repoid:rhodecode
126 126
127 127 Calling method get_repo => http://127.0.0.1:5000
128 128 Server response
129 129 {
130 130 <json data>
131 131 }
132 132
133 133 # Creating a new mercurial repository called 'brand-new'
134 134 # with a description 'Repo-description'
135 135 rhodecode-api --instance-name=enterprise-1 create_repo repo_name:brand-new repo_type:hg description:Repo-description
136 136 {
137 137 "error": null,
138 138 "id": 1110,
139 139 "result": {
140 140 "msg": "Created new repository `brand-new`",
141 141 "success": true,
142 142 "task": null
143 143 }
144 144 }
145 145
146 146 A broken example, what not to do.
147 147
148 148 .. code-block:: bash
149 149
150 150 # A call missing the required arguments
151 151 # and not specifying the instance
152 152 rhodecode-api get_repo
153 153
154 154 Calling method get_repo => http://127.0.0.1:5000
155 155 Server response
156 156 "Missing non optional `repoid` arg in JSON DATA"
157 157
158 158 You can specify pure JSON using the ``--format`` parameter.
159 159
160 160 .. code-block:: bash
161 161
162 162 rhodecode-api --format=json get_repo repoid:rhodecode
163 163
164 164 In such case only output that this function shows is pure JSON, we can use that
165 165 and pipe output to some json formatter.
166 166
167 167 If output is in pure JSON format, you can pipe output to a JSON formatter.
168 168
169 169 .. code-block:: bash
170 170
171 171 rhodecode-api --instance-name=enterprise-1 --format=json get_repo repoid:rhodecode | python -m json.tool
172 172
173 173 API METHODS
174 174 -----------
175 175
176 176 Each method by default required following arguments.
177 177
178 178 .. code-block:: bash
179 179
180 180 id : "<id_for_response>"
181 181 auth_token : "<auth_token>"
182 182 method : "<method name>"
183 183 args : {}
184 184
185 185 Use each **param** from docs and put it in args, Optional parameters
186 186 are not required in args.
187 187
188 188 .. code-block:: bash
189 189
190 190 args: {"repoid": "rhodecode"}
191 191
192 192 .. Note: From this point on things are generated by the script in
193 193 `scripts/fabfile.py`. To change things below, update the docstrings in the
194 194 ApiController.
195 195
196 196 .. --- API DEFS MARKER ---
197 197 .. toctree::
198 198
199 199 methods/license-methods
200 200 methods/deprecated-methods
201 201 methods/gist-methods
202 202 methods/pull-request-methods
203 203 methods/repo-methods
204 204 methods/repo-group-methods
205 205 methods/server-methods
206 206 methods/user-methods
207 207 methods/user-group-methods
@@ -1,1044 +1,1047 b''
1 1 .. _repo-methods-ref:
2 2
3 3 repo methods
4 4 ============
5 5
6 6 add_field_to_repo
7 7 -----------------
8 8
9 9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
10 10
11 11 Adds an extra field to a repository.
12 12
13 13 This command can only be run using an |authtoken| with at least
14 14 write permissions to the |repo|.
15 15
16 16 :param apiuser: This is filled automatically from the |authtoken|.
17 17 :type apiuser: AuthUser
18 18 :param repoid: Set the repository name or repository id.
19 19 :type repoid: str or int
20 20 :param key: Create a unique field key for this repository.
21 21 :type key: str
22 22 :param label:
23 23 :type label: Optional(str)
24 24 :param description:
25 25 :type description: Optional(str)
26 26
27 27
28 28 comment_commit
29 29 --------------
30 30
31 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 33 Set a commit comment, and optionally change the status of the commit.
34 34
35 35 :param apiuser: This is filled automatically from the |authtoken|.
36 36 :type apiuser: AuthUser
37 37 :param repoid: Set the repository name or repository ID.
38 38 :type repoid: str or int
39 39 :param commit_id: Specify the commit_id for which to set a comment.
40 40 :type commit_id: str
41 41 :param message: The comment text.
42 42 :type message: str
43 43 :param status: (**Optional**) status of commit, one of: 'not_reviewed',
44 44 'approved', 'rejected', 'under_review'
45 45 :type status: str
46 46 :param comment_type: Comment type, one of: 'note', 'todo'
47 47 :type comment_type: Optional(str), default: 'note'
48 48 :param userid: Set the user name of the comment creator.
49 49 :type userid: Optional(str or int)
50 50
51 51 Example error output:
52 52
53 53 .. code-block:: bash
54 54
55 55 {
56 56 "id" : <id_given_in_input>,
57 57 "result" : {
58 58 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
59 59 "status_change": null or <status>,
60 60 "success": true
61 61 },
62 62 "error" : null
63 63 }
64 64
65 65
66 66 create_repo
67 67 -----------
68 68
69 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 71 Creates a repository.
72 72
73 73 * If the repository name contains "/", repository will be created inside
74 74 a repository group or nested repository groups
75 75
76 76 For example "foo/bar/repo1" will create |repo| called "repo1" inside
77 77 group "foo/bar". You have to have permissions to access and write to
78 78 the last repository group ("bar" in this example)
79 79
80 80 This command can only be run using an |authtoken| with at least
81 81 permissions to create repositories, or write permissions to
82 82 parent repository groups.
83 83
84 84 :param apiuser: This is filled automatically from the |authtoken|.
85 85 :type apiuser: AuthUser
86 86 :param repo_name: Set the repository name.
87 87 :type repo_name: str
88 88 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
89 89 :type repo_type: str
90 90 :param owner: user_id or username
91 91 :type owner: Optional(str)
92 92 :param description: Set the repository description.
93 93 :type description: Optional(str)
94 94 :param private: set repository as private
95 95 :type private: bool
96 96 :param clone_uri: set clone_uri
97 97 :type clone_uri: str
98 98 :param landing_rev: <rev_type>:<rev>
99 99 :type landing_rev: str
100 100 :param enable_locking:
101 101 :type enable_locking: bool
102 102 :param enable_downloads:
103 103 :type enable_downloads: bool
104 104 :param enable_statistics:
105 105 :type enable_statistics: bool
106 106 :param copy_permissions: Copy permission from group in which the
107 107 repository is being created.
108 108 :type copy_permissions: bool
109 109
110 110
111 111 Example output:
112 112
113 113 .. code-block:: bash
114 114
115 115 id : <id_given_in_input>
116 116 result: {
117 117 "msg": "Created new repository `<reponame>`",
118 118 "success": true,
119 119 "task": "<celery task id or None if done sync>"
120 120 }
121 121 error: null
122 122
123 123
124 124 Example error output:
125 125
126 126 .. code-block:: bash
127 127
128 128 id : <id_given_in_input>
129 129 result : null
130 130 error : {
131 131 'failed to create repository `<repo_name>`'
132 132 }
133 133
134 134
135 135 delete_repo
136 136 -----------
137 137
138 138 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
139 139
140 140 Deletes a repository.
141 141
142 142 * When the `forks` parameter is set it's possible to detach or delete
143 143 forks of deleted repository.
144 144
145 145 This command can only be run using an |authtoken| with admin
146 146 permissions on the |repo|.
147 147
148 148 :param apiuser: This is filled automatically from the |authtoken|.
149 149 :type apiuser: AuthUser
150 150 :param repoid: Set the repository name or repository ID.
151 151 :type repoid: str or int
152 152 :param forks: Set to `detach` or `delete` forks from the |repo|.
153 153 :type forks: Optional(str)
154 154
155 155 Example error output:
156 156
157 157 .. code-block:: bash
158 158
159 159 id : <id_given_in_input>
160 160 result: {
161 161 "msg": "Deleted repository `<reponame>`",
162 162 "success": true
163 163 }
164 164 error: null
165 165
166 166
167 167 fork_repo
168 168 ---------
169 169
170 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 172 Creates a fork of the specified |repo|.
173 173
174 174 * If the fork_name contains "/", fork will be created inside
175 175 a repository group or nested repository groups
176 176
177 177 For example "foo/bar/fork-repo" will create fork called "fork-repo"
178 178 inside group "foo/bar". You have to have permissions to access and
179 179 write to the last repository group ("bar" in this example)
180 180
181 181 This command can only be run using an |authtoken| with minimum
182 182 read permissions of the forked repo, create fork permissions for an user.
183 183
184 184 :param apiuser: This is filled automatically from the |authtoken|.
185 185 :type apiuser: AuthUser
186 186 :param repoid: Set repository name or repository ID.
187 187 :type repoid: str or int
188 188 :param fork_name: Set the fork name, including it's repository group membership.
189 189 :type fork_name: str
190 190 :param owner: Set the fork owner.
191 191 :type owner: str
192 192 :param description: Set the fork description.
193 193 :type description: str
194 194 :param copy_permissions: Copy permissions from parent |repo|. The
195 195 default is False.
196 196 :type copy_permissions: bool
197 197 :param private: Make the fork private. The default is False.
198 198 :type private: bool
199 199 :param landing_rev: Set the landing revision. The default is tip.
200 200
201 201 Example output:
202 202
203 203 .. code-block:: bash
204 204
205 205 id : <id_for_response>
206 206 api_key : "<api_key>"
207 207 args: {
208 208 "repoid" : "<reponame or repo_id>",
209 209 "fork_name": "<forkname>",
210 210 "owner": "<username or user_id = Optional(=apiuser)>",
211 211 "description": "<description>",
212 212 "copy_permissions": "<bool>",
213 213 "private": "<bool>",
214 214 "landing_rev": "<landing_rev>"
215 215 }
216 216
217 217 Example error output:
218 218
219 219 .. code-block:: bash
220 220
221 221 id : <id_given_in_input>
222 222 result: {
223 223 "msg": "Created fork of `<reponame>` as `<forkname>`",
224 224 "success": true,
225 225 "task": "<celery task id or None if done sync>"
226 226 }
227 227 error: null
228 228
229 229
230 230 get_repo
231 231 --------
232 232
233 233 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
234 234
235 235 Gets an existing repository by its name or repository_id.
236 236
237 237 The members section so the output returns users groups or users
238 238 associated with that repository.
239 239
240 240 This command can only be run using an |authtoken| with admin rights,
241 241 or users with at least read rights to the |repo|.
242 242
243 243 :param apiuser: This is filled automatically from the |authtoken|.
244 244 :type apiuser: AuthUser
245 245 :param repoid: The repository name or repository id.
246 246 :type repoid: str or int
247 247 :param cache: use the cached value for last changeset
248 248 :type: cache: Optional(bool)
249 249
250 250 Example output:
251 251
252 252 .. code-block:: bash
253 253
254 254 {
255 255 "error": null,
256 256 "id": <repo_id>,
257 257 "result": {
258 258 "clone_uri": null,
259 259 "created_on": "timestamp",
260 260 "description": "repo description",
261 261 "enable_downloads": false,
262 262 "enable_locking": false,
263 263 "enable_statistics": false,
264 264 "followers": [
265 265 {
266 266 "active": true,
267 267 "admin": false,
268 268 "api_key": "****************************************",
269 269 "api_keys": [
270 270 "****************************************"
271 271 ],
272 272 "email": "user@example.com",
273 273 "emails": [
274 274 "user@example.com"
275 275 ],
276 276 "extern_name": "rhodecode",
277 277 "extern_type": "rhodecode",
278 278 "firstname": "username",
279 279 "ip_addresses": [],
280 280 "language": null,
281 281 "last_login": "2015-09-16T17:16:35.854",
282 282 "lastname": "surname",
283 283 "user_id": <user_id>,
284 284 "username": "name"
285 285 }
286 286 ],
287 287 "fork_of": "parent-repo",
288 288 "landing_rev": [
289 289 "rev",
290 290 "tip"
291 291 ],
292 292 "last_changeset": {
293 293 "author": "User <user@example.com>",
294 294 "branch": "default",
295 295 "date": "timestamp",
296 296 "message": "last commit message",
297 297 "parents": [
298 298 {
299 299 "raw_id": "commit-id"
300 300 }
301 301 ],
302 302 "raw_id": "commit-id",
303 303 "revision": <revision number>,
304 304 "short_id": "short id"
305 305 },
306 306 "lock_reason": null,
307 307 "locked_by": null,
308 308 "locked_date": null,
309 309 "members": [
310 310 {
311 311 "name": "super-admin-name",
312 312 "origin": "super-admin",
313 313 "permission": "repository.admin",
314 314 "type": "user"
315 315 },
316 316 {
317 317 "name": "owner-name",
318 318 "origin": "owner",
319 319 "permission": "repository.admin",
320 320 "type": "user"
321 321 },
322 322 {
323 323 "name": "user-group-name",
324 324 "origin": "permission",
325 325 "permission": "repository.write",
326 326 "type": "user_group"
327 327 }
328 328 ],
329 329 "owner": "owner-name",
330 330 "permissions": [
331 331 {
332 332 "name": "super-admin-name",
333 333 "origin": "super-admin",
334 334 "permission": "repository.admin",
335 335 "type": "user"
336 336 },
337 337 {
338 338 "name": "owner-name",
339 339 "origin": "owner",
340 340 "permission": "repository.admin",
341 341 "type": "user"
342 342 },
343 343 {
344 344 "name": "user-group-name",
345 345 "origin": "permission",
346 346 "permission": "repository.write",
347 347 "type": "user_group"
348 348 }
349 349 ],
350 350 "private": true,
351 351 "repo_id": 676,
352 352 "repo_name": "user-group/repo-name",
353 353 "repo_type": "hg"
354 354 }
355 355 }
356 356
357 357
358 358 get_repo_changeset
359 359 ------------------
360 360
361 361 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
362 362
363 363 Returns information about a changeset.
364 364
365 365 Additionally parameters define the amount of details returned by
366 366 this function.
367 367
368 368 This command can only be run using an |authtoken| with admin rights,
369 369 or users with at least read rights to the |repo|.
370 370
371 371 :param apiuser: This is filled automatically from the |authtoken|.
372 372 :type apiuser: AuthUser
373 373 :param repoid: The repository name or repository id
374 374 :type repoid: str or int
375 375 :param revision: revision for which listing should be done
376 376 :type revision: str
377 377 :param details: details can be 'basic|extended|full' full gives diff
378 378 info details like the diff itself, and number of changed files etc.
379 379 :type details: Optional(str)
380 380
381 381
382 382 get_repo_changesets
383 383 -------------------
384 384
385 385 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
386 386
387 387 Returns a set of commits limited by the number starting
388 388 from the `start_rev` option.
389 389
390 390 Additional parameters define the amount of details returned by this
391 391 function.
392 392
393 393 This command can only be run using an |authtoken| with admin rights,
394 394 or users with at least read rights to |repos|.
395 395
396 396 :param apiuser: This is filled automatically from the |authtoken|.
397 397 :type apiuser: AuthUser
398 398 :param repoid: The repository name or repository ID.
399 399 :type repoid: str or int
400 400 :param start_rev: The starting revision from where to get changesets.
401 401 :type start_rev: str
402 402 :param limit: Limit the number of commits to this amount
403 403 :type limit: str or int
404 404 :param details: Set the level of detail returned. Valid option are:
405 405 ``basic``, ``extended`` and ``full``.
406 406 :type details: Optional(str)
407 407
408 408 .. note::
409 409
410 410 Setting the parameter `details` to the value ``full`` is extensive
411 411 and returns details like the diff itself, and the number
412 412 of changed files.
413 413
414 414
415 415 get_repo_nodes
416 416 --------------
417 417
418 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 420 Returns a list of nodes and children in a flat list for a given
421 421 path at given revision.
422 422
423 423 It's possible to specify ret_type to show only `files` or `dirs`.
424 424
425 425 This command can only be run using an |authtoken| with admin rights,
426 426 or users with at least read rights to |repos|.
427 427
428 428 :param apiuser: This is filled automatically from the |authtoken|.
429 429 :type apiuser: AuthUser
430 430 :param repoid: The repository name or repository ID.
431 431 :type repoid: str or int
432 432 :param revision: The revision for which listing should be done.
433 433 :type revision: str
434 434 :param root_path: The path from which to start displaying.
435 435 :type root_path: str
436 436 :param ret_type: Set the return type. Valid options are
437 437 ``all`` (default), ``files`` and ``dirs``.
438 438 :type ret_type: Optional(str)
439 439 :param details: Returns extended information about nodes, such as
440 440 md5, binary, and or content. The valid options are ``basic`` and
441 441 ``full``.
442 442 :type details: Optional(str)
443 443 :param max_file_bytes: Only return file content under this file size bytes
444 444 :type details: Optional(int)
445 445
446 446 Example output:
447 447
448 448 .. code-block:: bash
449 449
450 450 id : <id_given_in_input>
451 451 result: [
452 452 {
453 453 "name" : "<name>"
454 454 "type" : "<type>",
455 455 "binary": "<true|false>" (only in extended mode)
456 456 "md5" : "<md5 of file content>" (only in extended mode)
457 457 },
458 458 ...
459 459 ]
460 460 error: null
461 461
462 462
463 463 get_repo_refs
464 464 -------------
465 465
466 466 .. py:function:: get_repo_refs(apiuser, repoid)
467 467
468 468 Returns a dictionary of current references. It returns
469 469 bookmarks, branches, closed_branches, and tags for given repository
470 470
471 471 It's possible to specify ret_type to show only `files` or `dirs`.
472 472
473 473 This command can only be run using an |authtoken| with admin rights,
474 474 or users with at least read rights to |repos|.
475 475
476 476 :param apiuser: This is filled automatically from the |authtoken|.
477 477 :type apiuser: AuthUser
478 478 :param repoid: The repository name or repository ID.
479 479 :type repoid: str or int
480 480
481 481 Example output:
482 482
483 483 .. code-block:: bash
484 484
485 485 id : <id_given_in_input>
486 486 "result": {
487 487 "bookmarks": {
488 488 "dev": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
489 489 "master": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
490 490 },
491 491 "branches": {
492 492 "default": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
493 493 "stable": "367f590445081d8ec8c2ea0456e73ae1f1c3d6cf"
494 494 },
495 495 "branches_closed": {},
496 496 "tags": {
497 497 "tip": "5611d30200f4040ba2ab4f3d64e5b06408a02188",
498 498 "v4.4.0": "1232313f9e6adac5ce5399c2a891dc1e72b79022",
499 499 "v4.4.1": "cbb9f1d329ae5768379cdec55a62ebdd546c4e27",
500 500 "v4.4.2": "24ffe44a27fcd1c5b6936144e176b9f6dd2f3a17",
501 501 }
502 502 }
503 503 error: null
504 504
505 505
506 506 get_repo_settings
507 507 -----------------
508 508
509 509 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
510 510
511 511 Returns all settings for a repository. If key is given it only returns the
512 512 setting identified by the key or null.
513 513
514 514 :param apiuser: This is filled automatically from the |authtoken|.
515 515 :type apiuser: AuthUser
516 516 :param repoid: The repository name or repository id.
517 517 :type repoid: str or int
518 518 :param key: Key of the setting to return.
519 519 :type: key: Optional(str)
520 520
521 521 Example output:
522 522
523 523 .. code-block:: bash
524 524
525 525 {
526 526 "error": null,
527 527 "id": 237,
528 528 "result": {
529 529 "extensions_largefiles": true,
530 530 "extensions_evolve": true,
531 531 "hooks_changegroup_push_logger": true,
532 532 "hooks_changegroup_repo_size": false,
533 533 "hooks_outgoing_pull_logger": true,
534 534 "phases_publish": "True",
535 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 539 "rhodecode_pr_merge_enabled": true,
537 540 "rhodecode_use_outdated_comments": true
538 541 }
539 542 }
540 543
541 544
542 545 get_repos
543 546 ---------
544 547
545 548 .. py:function:: get_repos(apiuser, root=<Optional:None>, traverse=<Optional:True>)
546 549
547 550 Lists all existing repositories.
548 551
549 552 This command can only be run using an |authtoken| with admin rights,
550 553 or users with at least read rights to |repos|.
551 554
552 555 :param apiuser: This is filled automatically from the |authtoken|.
553 556 :type apiuser: AuthUser
554 557 :param root: specify root repository group to fetch repositories.
555 558 filters the returned repositories to be members of given root group.
556 559 :type root: Optional(None)
557 560 :param traverse: traverse given root into subrepositories. With this flag
558 561 set to False, it will only return top-level repositories from `root`.
559 562 if root is empty it will return just top-level repositories.
560 563 :type traverse: Optional(True)
561 564
562 565
563 566 Example output:
564 567
565 568 .. code-block:: bash
566 569
567 570 id : <id_given_in_input>
568 571 result: [
569 572 {
570 573 "repo_id" : "<repo_id>",
571 574 "repo_name" : "<reponame>"
572 575 "repo_type" : "<repo_type>",
573 576 "clone_uri" : "<clone_uri>",
574 577 "private": : "<bool>",
575 578 "created_on" : "<datetimecreated>",
576 579 "description" : "<description>",
577 580 "landing_rev": "<landing_rev>",
578 581 "owner": "<repo_owner>",
579 582 "fork_of": "<name_of_fork_parent>",
580 583 "enable_downloads": "<bool>",
581 584 "enable_locking": "<bool>",
582 585 "enable_statistics": "<bool>",
583 586 },
584 587 ...
585 588 ]
586 589 error: null
587 590
588 591
589 592 grant_user_group_permission
590 593 ---------------------------
591 594
592 595 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
593 596
594 597 Grant permission for a user group on the specified repository,
595 598 or update existing permissions.
596 599
597 600 This command can only be run using an |authtoken| with admin
598 601 permissions on the |repo|.
599 602
600 603 :param apiuser: This is filled automatically from the |authtoken|.
601 604 :type apiuser: AuthUser
602 605 :param repoid: Set the repository name or repository ID.
603 606 :type repoid: str or int
604 607 :param usergroupid: Specify the ID of the user group.
605 608 :type usergroupid: str or int
606 609 :param perm: Set the user group permissions using the following
607 610 format: (repository.(none|read|write|admin))
608 611 :type perm: str
609 612
610 613 Example output:
611 614
612 615 .. code-block:: bash
613 616
614 617 id : <id_given_in_input>
615 618 result : {
616 619 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
617 620 "success": true
618 621
619 622 }
620 623 error : null
621 624
622 625 Example error output:
623 626
624 627 .. code-block:: bash
625 628
626 629 id : <id_given_in_input>
627 630 result : null
628 631 error : {
629 632 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
630 633 }
631 634
632 635
633 636 grant_user_permission
634 637 ---------------------
635 638
636 639 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
637 640
638 641 Grant permissions for the specified user on the given repository,
639 642 or update existing permissions if found.
640 643
641 644 This command can only be run using an |authtoken| with admin
642 645 permissions on the |repo|.
643 646
644 647 :param apiuser: This is filled automatically from the |authtoken|.
645 648 :type apiuser: AuthUser
646 649 :param repoid: Set the repository name or repository ID.
647 650 :type repoid: str or int
648 651 :param userid: Set the user name.
649 652 :type userid: str
650 653 :param perm: Set the user permissions, using the following format
651 654 ``(repository.(none|read|write|admin))``
652 655 :type perm: str
653 656
654 657 Example output:
655 658
656 659 .. code-block:: bash
657 660
658 661 id : <id_given_in_input>
659 662 result: {
660 663 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
661 664 "success": true
662 665 }
663 666 error: null
664 667
665 668
666 669 invalidate_cache
667 670 ----------------
668 671
669 672 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
670 673
671 674 Invalidates the cache for the specified repository.
672 675
673 676 This command can only be run using an |authtoken| with admin rights to
674 677 the specified repository.
675 678
676 679 This command takes the following options:
677 680
678 681 :param apiuser: This is filled automatically from |authtoken|.
679 682 :type apiuser: AuthUser
680 683 :param repoid: Sets the repository name or repository ID.
681 684 :type repoid: str or int
682 685 :param delete_keys: This deletes the invalidated keys instead of
683 686 just flagging them.
684 687 :type delete_keys: Optional(``True`` | ``False``)
685 688
686 689 Example output:
687 690
688 691 .. code-block:: bash
689 692
690 693 id : <id_given_in_input>
691 694 result : {
692 695 'msg': Cache for repository `<repository name>` was invalidated,
693 696 'repository': <repository name>
694 697 }
695 698 error : null
696 699
697 700 Example error output:
698 701
699 702 .. code-block:: bash
700 703
701 704 id : <id_given_in_input>
702 705 result : null
703 706 error : {
704 707 'Error occurred during cache invalidation action'
705 708 }
706 709
707 710
708 711 lock
709 712 ----
710 713
711 714 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
712 715
713 716 Sets the lock state of the specified |repo| by the given user.
714 717 From more information, see :ref:`repo-locking`.
715 718
716 719 * If the ``userid`` option is not set, the repository is locked to the
717 720 user who called the method.
718 721 * If the ``locked`` parameter is not set, the current lock state of the
719 722 repository is displayed.
720 723
721 724 This command can only be run using an |authtoken| with admin rights to
722 725 the specified repository.
723 726
724 727 This command takes the following options:
725 728
726 729 :param apiuser: This is filled automatically from the |authtoken|.
727 730 :type apiuser: AuthUser
728 731 :param repoid: Sets the repository name or repository ID.
729 732 :type repoid: str or int
730 733 :param locked: Sets the lock state.
731 734 :type locked: Optional(``True`` | ``False``)
732 735 :param userid: Set the repository lock to this user.
733 736 :type userid: Optional(str or int)
734 737
735 738 Example error output:
736 739
737 740 .. code-block:: bash
738 741
739 742 id : <id_given_in_input>
740 743 result : {
741 744 'repo': '<reponame>',
742 745 'locked': <bool: lock state>,
743 746 'locked_since': <int: lock timestamp>,
744 747 'locked_by': <username of person who made the lock>,
745 748 'lock_reason': <str: reason for locking>,
746 749 'lock_state_changed': <bool: True if lock state has been changed in this request>,
747 750 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
748 751 or
749 752 'msg': 'Repo `<repository name>` not locked.'
750 753 or
751 754 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
752 755 }
753 756 error : null
754 757
755 758 Example error output:
756 759
757 760 .. code-block:: bash
758 761
759 762 id : <id_given_in_input>
760 763 result : null
761 764 error : {
762 765 'Error occurred locking repository `<reponame>`'
763 766 }
764 767
765 768
766 769 maintenance
767 770 -----------
768 771
769 772 .. py:function:: maintenance(apiuser, repoid)
770 773
771 774 Triggers a maintenance on the given repository.
772 775
773 776 This command can only be run using an |authtoken| with admin
774 777 rights to the specified repository. For more information,
775 778 see :ref:`config-token-ref`.
776 779
777 780 This command takes the following options:
778 781
779 782 :param apiuser: This is filled automatically from the |authtoken|.
780 783 :type apiuser: AuthUser
781 784 :param repoid: The repository name or repository ID.
782 785 :type repoid: str or int
783 786
784 787 Example output:
785 788
786 789 .. code-block:: bash
787 790
788 791 id : <id_given_in_input>
789 792 result : {
790 793 "msg": "executed maintenance command",
791 794 "executed_actions": [
792 795 <action_message>, <action_message2>...
793 796 ],
794 797 "repository": "<repository name>"
795 798 }
796 799 error : null
797 800
798 801 Example error output:
799 802
800 803 .. code-block:: bash
801 804
802 805 id : <id_given_in_input>
803 806 result : null
804 807 error : {
805 808 "Unable to execute maintenance on `<reponame>`"
806 809 }
807 810
808 811
809 812 pull
810 813 ----
811 814
812 815 .. py:function:: pull(apiuser, repoid)
813 816
814 817 Triggers a pull on the given repository from a remote location. You
815 818 can use this to keep remote repositories up-to-date.
816 819
817 820 This command can only be run using an |authtoken| with admin
818 821 rights to the specified repository. For more information,
819 822 see :ref:`config-token-ref`.
820 823
821 824 This command takes the following options:
822 825
823 826 :param apiuser: This is filled automatically from the |authtoken|.
824 827 :type apiuser: AuthUser
825 828 :param repoid: The repository name or repository ID.
826 829 :type repoid: str or int
827 830
828 831 Example output:
829 832
830 833 .. code-block:: bash
831 834
832 835 id : <id_given_in_input>
833 836 result : {
834 837 "msg": "Pulled from `<repository name>`"
835 838 "repository": "<repository name>"
836 839 }
837 840 error : null
838 841
839 842 Example error output:
840 843
841 844 .. code-block:: bash
842 845
843 846 id : <id_given_in_input>
844 847 result : null
845 848 error : {
846 849 "Unable to pull changes from `<reponame>`"
847 850 }
848 851
849 852
850 853 remove_field_from_repo
851 854 ----------------------
852 855
853 856 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
854 857
855 858 Removes an extra field from a repository.
856 859
857 860 This command can only be run using an |authtoken| with at least
858 861 write permissions to the |repo|.
859 862
860 863 :param apiuser: This is filled automatically from the |authtoken|.
861 864 :type apiuser: AuthUser
862 865 :param repoid: Set the repository name or repository ID.
863 866 :type repoid: str or int
864 867 :param key: Set the unique field key for this repository.
865 868 :type key: str
866 869
867 870
868 871 revoke_user_group_permission
869 872 ----------------------------
870 873
871 874 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
872 875
873 876 Revoke the permissions of a user group on a given repository.
874 877
875 878 This command can only be run using an |authtoken| with admin
876 879 permissions on the |repo|.
877 880
878 881 :param apiuser: This is filled automatically from the |authtoken|.
879 882 :type apiuser: AuthUser
880 883 :param repoid: Set the repository name or repository ID.
881 884 :type repoid: str or int
882 885 :param usergroupid: Specify the user group ID.
883 886 :type usergroupid: str or int
884 887
885 888 Example output:
886 889
887 890 .. code-block:: bash
888 891
889 892 id : <id_given_in_input>
890 893 result: {
891 894 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
892 895 "success": true
893 896 }
894 897 error: null
895 898
896 899
897 900 revoke_user_permission
898 901 ----------------------
899 902
900 903 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
901 904
902 905 Revoke permission for a user on the specified repository.
903 906
904 907 This command can only be run using an |authtoken| with admin
905 908 permissions on the |repo|.
906 909
907 910 :param apiuser: This is filled automatically from the |authtoken|.
908 911 :type apiuser: AuthUser
909 912 :param repoid: Set the repository name or repository ID.
910 913 :type repoid: str or int
911 914 :param userid: Set the user name of revoked user.
912 915 :type userid: str or int
913 916
914 917 Example error output:
915 918
916 919 .. code-block:: bash
917 920
918 921 id : <id_given_in_input>
919 922 result: {
920 923 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
921 924 "success": true
922 925 }
923 926 error: null
924 927
925 928
926 929 set_repo_settings
927 930 -----------------
928 931
929 932 .. py:function:: set_repo_settings(apiuser, repoid, settings)
930 933
931 934 Update repository settings. Returns true on success.
932 935
933 936 :param apiuser: This is filled automatically from the |authtoken|.
934 937 :type apiuser: AuthUser
935 938 :param repoid: The repository name or repository id.
936 939 :type repoid: str or int
937 940 :param settings: The new settings for the repository.
938 941 :type: settings: dict
939 942
940 943 Example output:
941 944
942 945 .. code-block:: bash
943 946
944 947 {
945 948 "error": null,
946 949 "id": 237,
947 950 "result": true
948 951 }
949 952
950 953
951 954 strip
952 955 -----
953 956
954 957 .. py:function:: strip(apiuser, repoid, revision, branch)
955 958
956 959 Strips the given revision from the specified repository.
957 960
958 961 * This will remove the revision and all of its decendants.
959 962
960 963 This command can only be run using an |authtoken| with admin rights to
961 964 the specified repository.
962 965
963 966 This command takes the following options:
964 967
965 968 :param apiuser: This is filled automatically from the |authtoken|.
966 969 :type apiuser: AuthUser
967 970 :param repoid: The repository name or repository ID.
968 971 :type repoid: str or int
969 972 :param revision: The revision you wish to strip.
970 973 :type revision: str
971 974 :param branch: The branch from which to strip the revision.
972 975 :type branch: str
973 976
974 977 Example output:
975 978
976 979 .. code-block:: bash
977 980
978 981 id : <id_given_in_input>
979 982 result : {
980 983 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
981 984 "repository": "<repository name>"
982 985 }
983 986 error : null
984 987
985 988 Example error output:
986 989
987 990 .. code-block:: bash
988 991
989 992 id : <id_given_in_input>
990 993 result : null
991 994 error : {
992 995 "Unable to strip commit <commit_hash> from repo `<repository name>`"
993 996 }
994 997
995 998
996 999 update_repo
997 1000 -----------
998 1001
999 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 1004 Updates a repository with the given information.
1002 1005
1003 1006 This command can only be run using an |authtoken| with at least
1004 1007 admin permissions to the |repo|.
1005 1008
1006 1009 * If the repository name contains "/", repository will be updated
1007 1010 accordingly with a repository group or nested repository groups
1008 1011
1009 1012 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
1010 1013 called "repo-test" and place it inside group "foo/bar".
1011 1014 You have to have permissions to access and write to the last repository
1012 1015 group ("bar" in this example)
1013 1016
1014 1017 :param apiuser: This is filled automatically from the |authtoken|.
1015 1018 :type apiuser: AuthUser
1016 1019 :param repoid: repository name or repository ID.
1017 1020 :type repoid: str or int
1018 1021 :param repo_name: Update the |repo| name, including the
1019 1022 repository group it's in.
1020 1023 :type repo_name: str
1021 1024 :param owner: Set the |repo| owner.
1022 1025 :type owner: str
1023 1026 :param fork_of: Set the |repo| as fork of another |repo|.
1024 1027 :type fork_of: str
1025 1028 :param description: Update the |repo| description.
1026 1029 :type description: str
1027 1030 :param private: Set the |repo| as private. (True | False)
1028 1031 :type private: bool
1029 1032 :param clone_uri: Update the |repo| clone URI.
1030 1033 :type clone_uri: str
1031 1034 :param landing_rev: Set the |repo| landing revision. Default is ``rev:tip``.
1032 1035 :type landing_rev: str
1033 1036 :param enable_statistics: Enable statistics on the |repo|, (True | False).
1034 1037 :type enable_statistics: bool
1035 1038 :param enable_locking: Enable |repo| locking.
1036 1039 :type enable_locking: bool
1037 1040 :param enable_downloads: Enable downloads from the |repo|, (True | False).
1038 1041 :type enable_downloads: bool
1039 1042 :param fields: Add extra fields to the |repo|. Use the following
1040 1043 example format: ``field_key=field_val,field_key2=fieldval2``.
1041 1044 Escape ', ' with \,
1042 1045 :type fields: str
1043 1046
1044 1047
@@ -1,210 +1,234 b''
1 1 .. _server-methods-ref:
2 2
3 3 server methods
4 4 ==============
5 5
6 6 cleanup_sessions
7 7 ----------------
8 8
9 9 .. py:function:: cleanup_sessions(apiuser, older_then=<Optional:60>)
10 10
11 11 Triggers a session cleanup action.
12 12
13 13 If the ``older_then`` option is set, only sessions that hasn't been
14 14 accessed in the given number of days will be removed.
15 15
16 16 This command can only be run using an |authtoken| with admin rights to
17 17 the specified repository.
18 18
19 19 This command takes the following options:
20 20
21 21 :param apiuser: This is filled automatically from the |authtoken|.
22 22 :type apiuser: AuthUser
23 23 :param older_then: Deletes session that hasn't been accessed
24 24 in given number of days.
25 25 :type older_then: Optional(int)
26 26
27 27 Example output:
28 28
29 29 .. code-block:: bash
30 30
31 31 id : <id_given_in_input>
32 32 result: {
33 33 "backend": "<type of backend>",
34 34 "sessions_removed": <number_of_removed_sessions>
35 35 }
36 36 error : null
37 37
38 38 Example error output:
39 39
40 40 .. code-block:: bash
41 41
42 42 id : <id_given_in_input>
43 43 result : null
44 44 error : {
45 45 'Error occurred during session cleanup'
46 46 }
47 47
48 48
49 49 get_ip
50 50 ------
51 51
52 52 .. py:function:: get_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
53 53
54 54 Displays the IP Address as seen from the |RCE| server.
55 55
56 56 * This command displays the IP Address, as well as all the defined IP
57 57 addresses for the specified user. If the ``userid`` is not set, the
58 58 data returned is for the user calling the method.
59 59
60 60 This command can only be run using an |authtoken| with admin rights to
61 61 the specified repository.
62 62
63 63 This command takes the following options:
64 64
65 65 :param apiuser: This is filled automatically from |authtoken|.
66 66 :type apiuser: AuthUser
67 67 :param userid: Sets the userid for which associated IP Address data
68 68 is returned.
69 69 :type userid: Optional(str or int)
70 70
71 71 Example output:
72 72
73 73 .. code-block:: bash
74 74
75 75 id : <id_given_in_input>
76 76 result : {
77 77 "server_ip_addr": "<ip_from_clien>",
78 78 "user_ips": [
79 79 {
80 80 "ip_addr": "<ip_with_mask>",
81 81 "ip_range": ["<start_ip>", "<end_ip>"],
82 82 },
83 83 ...
84 84 ]
85 85 }
86 86
87 87
88 88 get_method
89 89 ----------
90 90
91 91 .. py:function:: get_method(apiuser, pattern=<Optional:'*'>)
92 92
93 93 Returns list of all available API methods. By default match pattern
94 94 os "*" but any other pattern can be specified. eg *comment* will return
95 95 all methods with comment inside them. If just single method is matched
96 96 returned data will also include method specification
97 97
98 98 This command can only be run using an |authtoken| with admin rights to
99 99 the specified repository.
100 100
101 101 This command takes the following options:
102 102
103 103 :param apiuser: This is filled automatically from the |authtoken|.
104 104 :type apiuser: AuthUser
105 105 :param pattern: pattern to match method names against
106 106 :type older_then: Optional("*")
107 107
108 108 Example output:
109 109
110 110 .. code-block:: bash
111 111
112 112 id : <id_given_in_input>
113 113 "result": [
114 114 "changeset_comment",
115 115 "comment_pull_request",
116 116 "comment_commit"
117 117 ]
118 118 error : null
119 119
120 120 .. code-block:: bash
121 121
122 122 id : <id_given_in_input>
123 123 "result": [
124 124 "comment_commit",
125 125 {
126 126 "apiuser": "<RequiredType>",
127 127 "comment_type": "<Optional:u'note'>",
128 128 "commit_id": "<RequiredType>",
129 129 "message": "<RequiredType>",
130 130 "repoid": "<RequiredType>",
131 131 "request": "<RequiredType>",
132 132 "resolves_comment_id": "<Optional:None>",
133 133 "status": "<Optional:None>",
134 134 "userid": "<Optional:<OptionalAttr:apiuser>>"
135 135 }
136 136 ]
137 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 164 get_server_info
141 165 ---------------
142 166
143 167 .. py:function:: get_server_info(apiuser)
144 168
145 169 Returns the |RCE| server information.
146 170
147 171 This includes the running version of |RCE| and all installed
148 172 packages. This command takes the following options:
149 173
150 174 :param apiuser: This is filled automatically from the |authtoken|.
151 175 :type apiuser: AuthUser
152 176
153 177 Example output:
154 178
155 179 .. code-block:: bash
156 180
157 181 id : <id_given_in_input>
158 182 result : {
159 183 'modules': [<module name>,...]
160 184 'py_version': <python version>,
161 185 'platform': <platform type>,
162 186 'rhodecode_version': <rhodecode version>
163 187 }
164 188 error : null
165 189
166 190
167 191 rescan_repos
168 192 ------------
169 193
170 194 .. py:function:: rescan_repos(apiuser, remove_obsolete=<Optional:False>)
171 195
172 196 Triggers a rescan of the specified repositories.
173 197
174 198 * If the ``remove_obsolete`` option is set, it also deletes repositories
175 199 that are found in the database but not on the file system, so called
176 200 "clean zombies".
177 201
178 202 This command can only be run using an |authtoken| with admin rights to
179 203 the specified repository.
180 204
181 205 This command takes the following options:
182 206
183 207 :param apiuser: This is filled automatically from the |authtoken|.
184 208 :type apiuser: AuthUser
185 209 :param remove_obsolete: Deletes repositories from the database that
186 210 are not found on the filesystem.
187 211 :type remove_obsolete: Optional(``True`` | ``False``)
188 212
189 213 Example output:
190 214
191 215 .. code-block:: bash
192 216
193 217 id : <id_given_in_input>
194 218 result : {
195 219 'added': [<added repository name>,...]
196 220 'removed': [<removed repository name>,...]
197 221 }
198 222 error : null
199 223
200 224 Example error output:
201 225
202 226 .. code-block:: bash
203 227
204 228 id : <id_given_in_input>
205 229 result : null
206 230 error : {
207 231 'Error occurred during rescan repositories action'
208 232 }
209 233
210 234
@@ -1,88 +1,90 b''
1 1 .. _config-ldap-ref:
2 2
3 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 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 older LDAP versions use ``rhodecode.lib.auth_modules.auth_ldap``
10 * For LDAPv3 use ``LDAP (egg:rhodecode-enterprise-ce#ldap)``
11 * For LDAPv3 with user group sync use ``LDAP + User Groups (egg:rhodecode-enterprise-ee#ldap_group)``
12
11 13
12 14 .. important::
13 15
14 16 The email used with your |RCE| super-admin account needs to match the email
15 17 address attached to your admin profile in LDAP. This is because
16 18 within |RCE| the user email needs to be unique, and multiple users
17 19 cannot share an email account.
18 20
19 21 Likewise, if as an admin you also have a user account, the email address
20 22 attached to the user account needs to be different.
21 23
22 24 LDAP Configuration Steps
23 25 ^^^^^^^^^^^^^^^^^^^^^^^^
24 26
25 27 To configure |LDAP|, use the following steps:
26 28
27 29 1. From the |RCM| interface, select
28 30 :menuselection:`Admin --> Authentication`
29 31 2. Enable the required plugin and select :guilabel:`Save`
30 32 3. Select the :guilabel:`Enabled` check box in the plugin configuration section
31 33 4. Add the required LDAP information and :guilabel:`Save`, for more details,
32 34 see :ref:`config-ldap-examples`
33 35
34 36 For a more detailed description of LDAP objects, see :ref:`ldap-gloss-ref`:
35 37
36 38 .. _config-ldap-examples:
37 39
38 40 Example LDAP configuration
39 41 ^^^^^^^^^^^^^^^^^^^^^^^^^^
40 42 .. code-block:: bash
41 43
42 44 # Auth Cache TTL
43 45 3600
44 46 # Host
45 47 https://ldap1.server.com/ldap-admin/,https://ldap2.server.com/ldap-admin/
46 48 # Port
47 49 389
48 50 # Account
49 51 cn=admin,dc=rhodecode,dc=com
50 52 # Password
51 53 ldap-user-password
52 54 # LDAP connection security
53 55 LDAPS
54 56 # Certificate checks level
55 57 DEMAND
56 58 # Base DN
57 59 cn=Rufus Magillacuddy,ou=users,dc=rhodecode,dc=com
58 60 # User Search Base
59 61 ou=groups,ou=users
60 62 # LDAP search filter
61 63 (objectClass=person)
62 64 # LDAP search scope
63 65 SUBTREE
64 66 # Login attribute
65 67 rmagillacuddy
66 68 # First Name Attribute
67 69 Rufus
68 70 # Last Name Attribute
69 71 Magillacuddy
70 72 # Email Attribute
71 73 LDAP-Registered@email.ac
72 74 # User Member of Attribute
73 75 Organizational Role
74 76 # Group search base
75 77 cn=users,ou=groups,dc=rhodecode,dc=com
76 78 # LDAP Group Search Filter
77 79 (objectclass=posixGroup)
78 80 # Group Name Attribute
79 81 users
80 82 # Group Member Of Attribute
81 83 cn
82 84 # Admin Groups
83 85 admin,devops,qa
84 86
85 87 .. toctree::
86 88
87 89 ldap-active-directory
88 90 ldap-authentication
@@ -1,129 +1,138 b''
1 1 .. _ssh-connection:
2 2
3 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 7 following instructions.
8 8
9 .. note::
9 1. Include |RCE| generated `authorized_keys` file into your sshd_config.
10 10
11 SSH access with full |RCE| permissions will require an Admin |authtoken|.
11 By default a file `authorized_keys_rhodecode` is created containing
12 configuration and all allowed user connection keys are stored inside.
13 On each change of stored keys inside |RCE| this file is updated with
14 proper data.
12 15
13 You need to install the |RC| SSH tool on the server which is running
14 the |RCE| instance.
16 .. code-block:: bash
15 17
16 1. Gather the following information about the instance you wish to connect to:
18 # Edit sshd_config file most likely at /etc/ssh/sshd_config
19 # add or edit the AuthorizedKeysFile, and set to use custom files
20
21 AuthorizedKeysFile %h/.ssh/authorized_keys %h/.ssh/authorized_keys_rhodecode
17 22
18 * *Hostname*: Use the ``rccontrol status`` command to view instance details.
19 * *API key*: From the |RCE|, go to
20 :menuselection:`username --> My Account --> Auth Tokens`
21 * *Configuration file*: Identify the configuration file for that instance,
22 the default is :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
23 * Identify which |git| and |hg| packages your |RCM| instance is using.
23 This way we use a separate file for SSH access and separate one for
24 SSH access to |RCE| repositories.
25
26
27 2. Enable the SSH module on instance.
24 28
25 * For |git|, see
26 :menuselection:`Admin --> Settings --> System Info`
27 * For |hg|, use the ``which hg`` command.
29 On the server where |RCE| is running executing:
30
31 .. code-block:: bash
28 32
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 rccontrol enable-module ssh {instance-id}
33 34
34 .. code-block:: ini
35 This will add the following configuration into :file:`rhodecode.ini`.
36 This also can be done manually:
35 37
36 [api]
37 host=http://localhost:10005
38 key=24a67076d69c84670132f55166ac79d1faafd660
38 .. code-block:: ini
39 39
40 [shell]
41 shell=/bin/bash -l
40 ############################################################
41 ### SSH Support Settings ###
42 ############################################################
42 43
43 [vcs]
44 root=/path/to/repos/
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
45 49
46 [rhodecode]
47 config=/home/user/.rccontrol/enterprise-3/rhodecode.ini
48
49 [vcs:hg]
50 path=/usr/bin/hg
50 ## Options for ssh, default is `no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding`
51 # ssh.authorized_keys_ssh_opts =
51 52
52 # should be a base dir for all git binaries, i.e. not ../bin/git
53 [vcs:git]
54 path=/usr/bin
55
56 [keys]
57 path=/home/user/.ssh/authorized_keys
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
58 57
59 5. Add the public key to your |RCE| instance server using the
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:
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
63 62
64 .. code-block:: bash
63 ## Allow shell when executing the ssh-wrapper command
64 ssh.wrapper_cmd_allow_shell = false
65 65
66 $ ./addkey.py --user username --shell --key /home/username/.ssh/id_rsa.pub
67
68 .. important::
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 69
70 To give SSH access to all users, you will need to maintain
71 each users |authtoken| in the :file:`authorized_keys` file.
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
72 75
73 6. Connect to your server using SSH from your local machine.
74
75 .. code-block:: bash
76 76
77 $ ssh user@localhost
78 Enter passphrase for key '/home/username/.ssh/id_rsa':
77 3. Set base_url for instance to enable proper event handling (Optional):
79 78
80 If you need to manually configure the ``authorized_keys`` file,
81 add a line for each key using the following example:
79 If you wish to have integrations working correctly via SSH please configure
80 The Application base_url.
82 81
83 .. code-block:: vim
82 Use the ``rccontrol status`` command to view instance details.
83 Hostname is required for the integration to properly set the instance URL.
84 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
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 87
88 .. tip::
88 add into `[app:main]` section the following configuration:
89
90 .. code-block:: ini
91
92 app.base_url = https://code.rhodecode.com
89 93
90 Best practice would be to create a special SSH user account with each
91 users |authtoken| attached.
94
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.
92 98
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.
99 Go to
100 :menuselection:`My Account --> SSH Keys` and add the public key with proper description.
96 101
97 See the following command line example of setting this up. These steps
98 take place on the server.
102 This will generate a new entry inside our configured `authorized_keys_rhodecode` file.
99 103
100 .. code-block:: bash
104 Test the connection from your local machine using the following example:
105
106 .. note::
101 107
102 # On the RhodeCode Enterprise server
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 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.
108 113
109 # Copy and modify the sshwrapper.ini as explained in step 4
110 $ cp sshwrapper.sample.ini sshwrapper.ini
114 Test connection using the ssh command from the local machine
115
116
117 For SVN:
118
119 .. code-block:: bash
111 120
112 $ cd ~
113 $ mkdir .ssh
114 $ touch .ssh/authorized_keys
121 SVN_SSH="ssh -i ~/.ssh/id_rsa_test_ssh" svn checkout svn+ssh://rhodecode@rc-server/repo_name
122
123 For GIT:
115 124
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
125 .. code-block:: bash
118 126
119 $ python addkey.py --user testuser --shell --key /path/to/id_rsa.pub
127 GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa_test_ssh' git clone ssh://rhodecode@rc-server/repo_name
120 128
121 # Note: testssh - user on the rhodecode instance
122 $ chmod 755 sshwrapper.py
129 For Mercurial:
123 130
124 Test the connection from your local machine using the following example:
131 .. code-block:: bash
125 132
126 .. code-block:: bash
133 Add to hgrc:
127 134
128 # Test connection using the ssh command from the local machine
129 $ ssh testuser@my-server.example.com
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 3 CONTRIBUTING TO API
4 4 ===================
5 5
6 6
7 7
8 8 Naming conventions
9 9 ==================
10 10
11 11 We keep the calls in the form ``{verb}_{noun}``.
12 12
13 13
14 14
15 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 19 other notes about deprecated parts of the application.
20 20
21 21
22 22 Deprecated API calls
23 23 --------------------
24 24
25 - Make sure to add them into the section :ref:`deprecated`.
26
27 25 - Use `deprecated` inside of the call docstring to make our users aware of the
28 26 deprecation::
29 27
30 28 .. deprecated:: 1.2.3
31 29
32 30 Use `new_call_name` instead to fetch this information.
33 31
34 32 - Make sure to log on level `logging.WARNING` a message that the API call or
35 33 specific parameters are deprecated.
36 34
37 35 - If possible return deprecation information inside of the result from the API
38 36 call. Use the attribute `_warning_` to contain a message.
39 37
40 38
41 39 Changed API calls
42 40 -----------------
43 41
44 42 - If the change is significant, consider to use `versionchanged` in the
45 43 docstring::
46 44
47 45 .. versionchanged:: 1.2.3
48 46
49 47 Optional explanation if reasonable.
50 48
51 49
52 50 Added API calls
53 51 ---------------
54 52
55 53 - Use `versionadded` to document since which version this API call is
56 54 available::
57 55
58 56 .. versionadded:: 1.2.3
59 57
60 58 Optional explanation if reasonable.
@@ -1,71 +1,73 b''
1 1
2 2 .. _config-celery:
3 3
4 Install Celery
5 --------------
4 Configure Celery
5 ----------------
6 6
7 To improve |RCM| performance you should install Celery_ as it makes
8 asynchronous tasks work efficiently. If you
9 install Celery you also need multi-broker support. The recommended message
10 broker is rabbitmq_. |RCM| works in sync
11 mode, but running Celery_ will give you a large speed improvement when
12 managing many big repositories.
7 To improve |RCM| performance you should configure and enabled Celery_ as it makes
8 asynchronous tasks work efficiently. Most important it allows sending notification
9 emails, create repository forks, and import repositories in async way.
10
11 If you decide to use Celery you also need a working message queue.
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
15 ``paster`` command and the message broker.
16 The ``paster`` command is already installed during |RCM| installation.
17 1. Install RabbitMQ, see the documentation on the Celery website for
18 `rabbitmq 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
21 `Celery installation`_ and `rabbitmq installation`_.
22 2. Enable Celery in the
23 :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
24 3. Run the Celery daemon with the ``paster`` command,
25 using the following example
26 ``.rccontrol/enterprise-1/profile/bin/paster celeryd .rccontrol/enterprise-1/rhodecode.ini``
24 broker.host =
25 broker.vhost =
26 broker.user =
27 broker.password =
27 28
28 .. code-block:: ini
29 Full configuration example is below:
30
31 .. code-block:: ini
29 32
30 # Set this section of the ini file to match your Celery installation
31 ####################################
32 ### CELERY CONFIG ####
33 ####################################
34 ## Set to true
35 use_celery = false
36 broker.host = localhost
37 broker.vhost = rabbitmqhost
38 broker.port = 5672
39 broker.user = rabbitmq
40 broker.password = qweqwe
33 # Set this section of the ini file to match your Celery installation
34 ####################################
35 ### CELERY CONFIG ####
36 ####################################
37 ## Set to true
38 use_celery = true
39 broker.host = localhost
40 broker.vhost = rabbitmqvhost
41 broker.port = 5672
42 broker.user = rabbitmq
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
45 celery.result.dburi = amqp://
46 celery.result.serialier = json
47 celery.result.backend = amqp
48 celery.result.dburi = amqp://
49 celery.result.serialier = json
47 50
48 #celery.send.task.error.emails = true
49 #celery.amqp.task.result.expires = 18000
51 #celery.send.task.error.emails = true
52 #celery.amqp.task.result.expires = 18000
50 53
51 celeryd.concurrency = 2
52 #celeryd.log.file = celeryd.log
53 celeryd.log.level = debug
54 celeryd.max.tasks.per.child = 1
54 celeryd.concurrency = 2
55 #celeryd.log.file = celeryd.log
56 celeryd.log.level = debug
57 celeryd.max.tasks.per.child = 1
55 58
56 ## tasks will never be sent to the queue, but executed locally instead.
57 celery.always.eager = false
59 ## tasks will never be sent to the queue, but executed locally instead.
60 celery.always.eager = false
61
58 62
59 .. code-block:: bash
63 3. Enable celery, and install `celeryd` process script using the `enable-module`::
60 64
61 # Once the above is configured and saved
62 # Run celery with the paster command and specify the ini file
63 .rccontrol/enterprise-1/profile/bin/paster celeryd .rccontrol/enterprise-1/rhodecode.ini
65 rccontrol enable-module celery {instance-id}
66
64 67
65 68 .. _python: http://www.python.org/
66 69 .. _mercurial: http://mercurial.selenic.com/
67 70 .. _celery: http://celeryproject.org/
68 71 .. _rabbitmq: http://www.rabbitmq.com/
69 72 .. _rabbitmq installation: http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html
70 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 1 .. _rhodecode-post-instal-ref:
2 2
3 3 Post Installation Tasks
4 4 =======================
5 5
6 6 The following tasks are the most common post installation requirements. Use
7 7 the information in these sections to configure your instance of |RCM|.
8 8
9 9 .. toctree::
10 10
11 11 setup-email
12 12 database-string
13 install-celery
13 configure-celery
14 14 migrate-repos
@@ -1,100 +1,101 b''
1 1 .. _rhodecode-release-notes-ref:
2 2
3 3 Release Notes
4 4 =============
5 5
6 6 |RCE| 4.x Versions
7 7 ------------------
8 8
9 9 .. toctree::
10 10 :maxdepth: 1
11 11
12 release-notes-4.10.0.rst
12 13 release-notes-4.9.1.rst
13 14 release-notes-4.9.0.rst
14 15 release-notes-4.8.0.rst
15 16 release-notes-4.7.2.rst
16 17 release-notes-4.7.1.rst
17 18 release-notes-4.7.0.rst
18 19 release-notes-4.6.1.rst
19 20 release-notes-4.6.0.rst
20 21 release-notes-4.5.2.rst
21 22 release-notes-4.5.1.rst
22 23 release-notes-4.5.0.rst
23 24 release-notes-4.4.2.rst
24 25 release-notes-4.4.1.rst
25 26 release-notes-4.4.0.rst
26 27 release-notes-4.3.1.rst
27 28 release-notes-4.3.0.rst
28 29 release-notes-4.2.1.rst
29 30 release-notes-4.2.0.rst
30 31 release-notes-4.1.2.rst
31 32 release-notes-4.1.1.rst
32 33 release-notes-4.1.0.rst
33 34 release-notes-4.0.1.rst
34 35 release-notes-4.0.0.rst
35 36
36 37 |RCE| 3.x Versions
37 38 ------------------
38 39
39 40 .. toctree::
40 41 :maxdepth: 1
41 42
42 43 release-notes-3.8.4.rst
43 44 release-notes-3.8.3.rst
44 45 release-notes-3.8.2.rst
45 46 release-notes-3.8.1.rst
46 47 release-notes-3.8.0.rst
47 48 release-notes-3.7.1.rst
48 49 release-notes-3.7.0.rst
49 50 release-notes-3.6.1.rst
50 51 release-notes-3.6.0.rst
51 52 release-notes-3.5.2.rst
52 53 release-notes-3.5.1.rst
53 54 release-notes-3.5.0.rst
54 55 release-notes-3.4.1.rst
55 56 release-notes-3.4.0.rst
56 57 release-notes-3.3.4.rst
57 58 release-notes-3.3.3.rst
58 59 release-notes-3.3.2.rst
59 60 release-notes-3.3.1.rst
60 61 release-notes-3.3.0.rst
61 62 release-notes-3.2.3.rst
62 63 release-notes-3.2.2.rst
63 64 release-notes-3.2.1.rst
64 65 release-notes-3.2.0.rst
65 66 release-notes-3.1.1.rst
66 67 release-notes-3.1.0.rst
67 68 release-notes-3.0.2.rst
68 69 release-notes-3.0.1.rst
69 70 release-notes-3.0.0.rst
70 71
71 72 |RCE| 2.x Versions
72 73 ------------------
73 74
74 75 .. toctree::
75 76 :maxdepth: 1
76 77
77 78 release-notes-2.2.8.rst
78 79 release-notes-2.2.7.rst
79 80 release-notes-2.2.6.rst
80 81 release-notes-2.2.5.rst
81 82 release-notes-2.2.4.rst
82 83 release-notes-2.2.3.rst
83 84 release-notes-2.2.2.rst
84 85 release-notes-2.2.1.rst
85 86 release-notes-2.2.0.rst
86 87 release-notes-2.1.0.rst
87 88 release-notes-2.0.2.rst
88 89 release-notes-2.0.1.rst
89 90 release-notes-2.0.0.rst
90 91
91 92 |RCE| 1.x Versions
92 93 ------------------
93 94
94 95 .. toctree::
95 96 :maxdepth: 1
96 97
97 98 release-notes-1.7.2.rst
98 99 release-notes-1.7.1.rst
99 100 release-notes-1.7.0.rst
100 101 release-notes-1.6.0.rst
@@ -1,85 +1,85 b''
1 1 .. _install-tools:
2 2
3 3 |RCT| Installation
4 4 ------------------
5 5
6 6 As of |RCE| 3.4.1 |RCT| is installed automatically on the server with |RCE|. You
7 7 do not need to install |RCT| on the server, but you will need to install them
8 8 on machines that need remote access. The tools are linked to the instance
9 9 folder, for example :file:`~/.rccontrol/{instance-id}/profile/bin`
10 10
11 11 You can list the available tools using the following example, and the valid
12 12 tools options are those which correspond with those in the :ref:`rc-tools`
13 13 section.
14 14
15 15 .. code-block:: bash
16 16
17 17 $ ls ~/.rccontrol/enterprise-4/profile/bin/
18 18
19 19 gen_js_i18n rhodecode-cleanup-gists rhodecode-tools svnrdump
20 20 gen_js_routes rhodecode-cleanup-repos supervisorctl svnserve
21 21 git rhodecode-config supervisord svnsync
22 22 gunicorn rhodecode-extensions svn svnversion
23 23 hg rhodecode-gist svnadmin vcsserver
24 24 paster rhodecode-index svndumpfilter
25 rcserver rhodecode-list-instances svnlook
25 rc-server rhodecode-list-instances svnlook
26 26 rhodecode-api rhodecode-setup-config svnmucc
27 27
28 28 You can then use the tools as described in the :ref:`rc-tools` section using the
29 29 following example:
30 30
31 31 .. code-block:: bash
32 32
33 33 # Running the indexer
34 34 $ ~/.rccontrol/enterprise-1/profile/bin/rhodecode-index \
35 35 --instance-name=enterprise-1
36 36
37 37 # Cleaning up gists
38 38 $ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-cleanup-gists \
39 39 --instance-name=enterprise-4
40 40
41 41 Scanning for gists in /home/brian/repos/.rc_gist_store...
42 42 preparing to remove [1] found gists
43 43
44 44 Installing |RCT|
45 45 ^^^^^^^^^^^^^^^^
46 46
47 47 |RCT| enable you to automate many of the most common |RCM| functions through
48 48 the API. Installing them on a local machine lets you carry out maintenance on
49 49 the server remotely. Once installed you can use them to index your |repos|
50 50 to setup full-text search, strip commits, or install |RC| Extensions for
51 51 additional functionality.
52 52
53 53 For more detailed instructions about using |RCT| for indexing and full-text
54 54 search, see :ref:`indexing-ref`
55 55
56 56 To install |RCT|, use the following steps:
57 57
58 58 1. Set up a ``virtualenv`` on your local machine, see virtualenv_ instructions
59 59 here.
60 60 2. Install |RCT| using pip. Full url with token is available at https://rhodecode.com/u/#rhodecode-tools
61 61 ``pip install -I https://dls.rhodecode.com/dls/<token>/rhodecode-tools/latest``
62 62
63 63
64 64 Once |RCT| is installed using these steps there are a few extra
65 65 configuration changes you can make. These are explained in more detail in the
66 66 :ref:`indexing-ref` section, and the :ref:`rc-tools` section.
67 67
68 68 .. code-block:: bash
69 69
70 70 # Create a virtualenv
71 71 brian@ubuntu:~$ virtualenv venv
72 72 New python executable in venv/bin/python
73 73 Installing setuptools, pip...done.
74 74
75 75 # Activate the virtualenv
76 76 brian@ubuntu:~$ . venv/bin/activate
77 77
78 78 # Install RhodeCode Tools inside the virtualenv, full url with token is available at https://rhodecode.com/u/#rhodecode-tools
79 79 $ pip install -I https://dls.rhodecode.com/dls/<token>/rhodecode-tools/latest
80 80
81 81 # Check the installation
82 82 $ rhodecode-tools --help
83 83
84 84 .. _virtualenv: https://virtualenv.pypa.io/en/latest/index.html
85 85
@@ -1,191 +1,194 b''
1 1 {
2 2 "dirs": {
3 3 "css": {
4 4 "src":"rhodecode/public/css",
5 5 "dest":"rhodecode/public/css"
6 6 },
7 7 "js": {
8 8 "src": "rhodecode/public/js/src",
9 "src_rc": "rhodecode/public/js/rhodecode",
9 10 "dest": "rhodecode/public/js",
10 11 "bower": "bower_components",
11 12 "node_modules": "node_modules"
12 13 }
13 14 },
14 15 "copy": {
15 16 "main": {
16 17 "expand": true,
17 18 "cwd": "bower_components",
18 19 "src": "webcomponentsjs/webcomponents-lite.js",
19 20 "dest": "<%= dirs.js.dest %>/vendors"
20 21 }
21 22 },
22 23 "concat": {
23 24 "polymercss": {
24 25 "src": [
25 26 "<%= dirs.js.src %>/components/root-styles-prefix.html",
26 27 "<%= dirs.css.src %>/style-polymer.css",
27 28 "<%= dirs.js.src %>/components/root-styles-suffix.html"
28 29 ],
29 30 "dest": "<%= dirs.js.dest %>/src/components/root-styles.gen.html",
30 31 "nonull": true
31 32 },
32 33 "dist": {
33 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 41 "<%= dirs.js.src %>/logging.js",
36 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 43 "<%= dirs.js.src %>/i18n_utils.js",
42 44 "<%= dirs.js.src %>/deform.js",
43 45 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
44 46 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
45 47 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
46 48 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
47 49 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
48 50 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
49 51 "<%= dirs.js.src %>/plugins/jquery.mark.js",
50 52 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
51 53 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
52 54 "<%= dirs.js.src %>/select2/select2.js",
53 55 "<%= dirs.js.src %>/codemirror/codemirror.js",
54 56 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
55 57 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
56 58 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
57 59 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
60 "<%= dirs.js.src %>/codemirror/codemirror_simplemode.js",
58 61 "<%= dirs.js.dest %>/mode/meta.js",
59 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 64 "<%= dirs.js.src %>/rhodecode/utils/array.js",
62 65 "<%= dirs.js.src %>/rhodecode/utils/string.js",
63 66 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
64 67 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
65 68 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
66 69 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
67 70 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
68 71 "<%= dirs.js.src %>/rhodecode/utils/os.js",
69 72 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
70 73 "<%= dirs.js.src %>/rhodecode/init.js",
71 74 "<%= dirs.js.src %>/rhodecode/changelog.js",
72 75 "<%= dirs.js.src %>/rhodecode/codemirror.js",
73 76 "<%= dirs.js.src %>/rhodecode/comments.js",
74 77 "<%= dirs.js.src %>/rhodecode/constants.js",
75 78 "<%= dirs.js.src %>/rhodecode/files.js",
76 79 "<%= dirs.js.src %>/rhodecode/followers.js",
77 80 "<%= dirs.js.src %>/rhodecode/menus.js",
78 81 "<%= dirs.js.src %>/rhodecode/notifications.js",
79 82 "<%= dirs.js.src %>/rhodecode/permissions.js",
80 83 "<%= dirs.js.src %>/rhodecode/pjax.js",
81 84 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
82 85 "<%= dirs.js.src %>/rhodecode/settings.js",
83 86 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
84 87 "<%= dirs.js.src %>/rhodecode/tooltips.js",
85 88 "<%= dirs.js.src %>/rhodecode/users.js",
86 89 "<%= dirs.js.src %>/rhodecode/appenlight.js",
87 90 "<%= dirs.js.src %>/rhodecode.js"
88 91 ],
89 92 "dest": "<%= dirs.js.dest %>/scripts.js",
90 93 "nonull": true
91 94 }
92 95 },
93 96 "crisper": {
94 97 "dist": {
95 98 "options": {
96 99 "cleanup": false,
97 100 "onlySplit": true
98 101 },
99 102 "src": "<%= dirs.js.dest %>/rhodecode-components.html",
100 103 "dest": "<%= dirs.js.dest %>/rhodecode-components.js"
101 104 }
102 105 },
103 106 "less": {
104 107 "development": {
105 108 "options": {
106 109 "compress": false,
107 110 "yuicompress": false,
108 111 "optimization": 0
109 112 },
110 113 "files": {
111 114 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
112 115 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
113 116 }
114 117 },
115 118 "production": {
116 119 "options": {
117 120 "compress": true,
118 121 "yuicompress": true,
119 122 "optimization": 2
120 123 },
121 124 "files": {
122 125 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
123 126 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
124 127 }
125 128 },
126 129 "components": {
127 130 "files": [
128 131 {
129 132 "cwd": "<%= dirs.js.src %>/components/",
130 133 "dest": "<%= dirs.js.src %>/components/",
131 134 "src": [
132 135 "**/*.less"
133 136 ],
134 137 "expand": true,
135 138 "ext": ".css"
136 139 }
137 140 ]
138 141 }
139 142 },
140 143 "watch": {
141 144 "less": {
142 145 "files": [
143 146 "<%= dirs.css.src %>/**/*.less",
144 147 "<%= dirs.js.src %>/components/**/*.less"
145 148 ],
146 149 "tasks": [
147 150 "less:development",
148 151 "less:components",
149 152 "concat:polymercss",
150 153 "vulcanize",
151 154 "crisper",
152 155 "concat:dist"
153 156 ]
154 157 },
155 158 "js": {
156 159 "files": [
157 160 "!<%= dirs.js.src %>/components/root-styles.gen.html",
158 161 "<%= dirs.js.src %>/**/*.js",
159 162 "<%= dirs.js.src %>/components/**/*.html"
160 163 ],
161 164 "tasks": [
162 165 "less:components",
163 166 "concat:polymercss",
164 167 "vulcanize",
165 168 "crisper",
166 169 "concat:dist"
167 170 ]
168 171 }
169 172 },
170 173 "jshint": {
171 174 "rhodecode": {
172 175 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
173 176 "options": {
174 177 "jshintrc": ".jshintrc"
175 178 }
176 179 }
177 180 },
178 181 "vulcanize": {
179 182 "default": {
180 183 "options": {
181 184 "abspath": "",
182 185 "inlineScripts": true,
183 186 "inlineCss": true,
184 187 "stripComments": true
185 188 },
186 189 "files": {
187 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 2 "name": "rhodecode-enterprise",
3 3 "version": "0.0.1",
4 4 "devDependencies": {
5 5 "grunt": "^0.4.5",
6 6 "grunt-contrib-copy": "^1.0.0",
7 7 "grunt-contrib-concat": "^0.5.1",
8 8 "grunt-contrib-jshint": "^0.12.0",
9 9 "grunt-contrib-less": "^1.1.0",
10 10 "grunt-contrib-watch": "^0.6.1",
11 11 "crisper": "^2.0.2",
12 12 "vulcanize": "^1.14.8",
13 13 "grunt-crisper": "^1.0.1",
14 14 "grunt-vulcanize": "^1.0.0",
15 "node2nix": "^1.0.0",
15 16 "jshint": "^2.9.1-rc3",
16 17 "bower": "^1.7.9",
18 "jquery": "1.11.3",
17 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 1 { fetchbower, buildEnv }:
2 2 buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
3 3 (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "0ggh3k8ssafd056ib1m5bvzi7cpz3ry7gr5176d79na1w0c3i7dz")
4 4 (fetchbower "polymer" "Polymer/polymer#1.6.1" "Polymer/polymer#^1.6.1" "09mm0jgk457gvwqlc155swch7gjr6fs3g7spnvhi6vh5b6518540")
5 5 (fetchbower "paper-button" "PolymerElements/paper-button#1.0.13" "PolymerElements/paper-button#^1.0.13" "0i3y153nqk06pn0gk282vyybnl3g1w3w41d5i9z659cgn27g3fvm")
6 6 (fetchbower "paper-spinner" "PolymerElements/paper-spinner#1.2.0" "PolymerElements/paper-spinner#^1.2.0" "1av1m6y81jw3hjhz1yqy3rwcgxarjzl58ldfn4q6sn51pgzngfqb")
7 7 (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1.3" "PolymerElements/paper-tooltip#^1.1.2" "0vmrm1n8k9sk9nvqy03q177axy22pia6i3j1gxbk72j3pqiqvg6k")
8 8 (fetchbower "paper-toast" "PolymerElements/paper-toast#1.3.0" "PolymerElements/paper-toast#^1.3.0" "0x9rqxsks5455s8pk4aikpp99ijdn6kxr9gvhwh99nbcqdzcxq1m")
9 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 11 (fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea#1.0.13" "PolymerElements/iron-autogrow-textarea#^1.0.13" "0zwhpl97vii1s8k0lgain8i9dnw29b0mxc5ixdscx9las13n2lqq")
12 12 (fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#1.0.6" "PolymerElements/iron-a11y-keys#^1.0.6" "1xz3mgghfcxixq28sdb654iaxj4nyi1bzcwf77ydkms6fviqs9mv")
13 13 (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl")
14 14 (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8")
15 15 (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh")
16 16 (fetchbower "paper-styles" "PolymerElements/paper-styles#1.1.4" "PolymerElements/paper-styles#^1.0.0" "0j8vg74xrcxlni8i93dsab3y80f34kk30lv4yblqpkp9c3nrilf7")
17 17 (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.4" "PolymerElements/neon-animation#^1.0.0" "16mz9i2n5w0k5j8d6gha23cnbdgm5syz3fawyh89gdbq97bi2q5j")
18 18 (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d")
19 19 (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#1.8.6" "PolymerElements/iron-overlay-behavior#^1.0.9" "14brn9gz6qqskarg3fxk91xs7vg02vgcsz9a9743kidxr0l0413m")
20 20 (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf")
21 21 (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#1.0.5" "PolymerElements/iron-checked-element-behavior#^1.0.0" "0l0yy4ah454s8bzfv076s8by7h67zy9ni6xb932qwyhx8br6c1m7")
22 22 (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb")
23 23 (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#1.0.17" "PolymerElements/iron-behaviors#^1.0.0" "021qvkmbk32jrrmmphpmwgby4bzi5jyf47rh1bxmq2ip07ly4bpr")
24 24 (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv")
25 25 (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.6" "PolymerElements/iron-form-element-behavior#^1.0.0" "0rdhxivgkdhhz2yadgdbjfc70l555p3y83vjh8rfj5hr0asyn6q1")
26 26 (fetchbower "iron-a11y-keys-behavior" "polymerelements/iron-a11y-keys-behavior#1.1.9" "polymerelements/iron-a11y-keys-behavior#^1.0.0" "1imm4gc84qizihhbyhfa8lwjh3myhj837f79i5m04xjgwrjmkaf6")
27 27 (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns")
28 28 (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj")
29 29 (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.2" "PolymerElements/iron-meta#^1.0.0" "1wl4dx8fnsknw9z9xi8bpc4cy9x70c11x4zxwxnj73hf3smifppl")
30 30 (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.5" "PolymerElements/iron-resizable-behavior#^1.0.0" "1fd5zmbr2hax42vmcasncvk7lzi38fmb1kyii26nn8pnnjak7zkn")
31 31 (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.2" "PolymerElements/iron-selector#^1.0.0" "1ajv46llqzvahm5g6g75w7nfyjcslp53ji0wm96l2k94j87spv3r")
32 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, (2397 lines changed) Show them Hide them
@@ -1,2391 +1,3022 b''
1 1 # This file has been generated by node2nix 1.0.0. Do not edit!
2 2
3 3 {nodeEnv, fetchurl, fetchgit}:
4 4
5 5 let
6 6 sources = {
7 7 "grunt-0.4.5" = {
8 8 name = "grunt";
9 9 packageName = "grunt";
10 10 version = "0.4.5";
11 11 src = fetchurl {
12 12 url = "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz";
13 13 sha1 = "56937cd5194324adff6d207631832a9d6ba4e7f0";
14 14 };
15 15 };
16 16 "grunt-contrib-copy-1.0.0" = {
17 17 name = "grunt-contrib-copy";
18 18 packageName = "grunt-contrib-copy";
19 19 version = "1.0.0";
20 20 src = fetchurl {
21 21 url = "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz";
22 22 sha1 = "7060c6581e904b8ab0d00f076e0a8f6e3e7c3573";
23 23 };
24 24 };
25 25 "grunt-contrib-concat-0.5.1" = {
26 26 name = "grunt-contrib-concat";
27 27 packageName = "grunt-contrib-concat";
28 28 version = "0.5.1";
29 29 src = fetchurl {
30 30 url = "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz";
31 31 sha1 = "953c6efdfdfd2c107ab9c85077f2d4b24d31cd49";
32 32 };
33 33 };
34 34 "grunt-contrib-jshint-0.12.0" = {
35 35 name = "grunt-contrib-jshint";
36 36 packageName = "grunt-contrib-jshint";
37 37 version = "0.12.0";
38 38 src = fetchurl {
39 39 url = "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.12.0.tgz";
40 40 sha1 = "f6b2f06fc715264837a7ab6c69a1ce1a689c2c29";
41 41 };
42 42 };
43 "grunt-contrib-less-1.4.0" = {
43 "grunt-contrib-less-1.4.1" = {
44 44 name = "grunt-contrib-less";
45 45 packageName = "grunt-contrib-less";
46 version = "1.4.0";
46 version = "1.4.1";
47 47 src = fetchurl {
48 url = "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.0.tgz";
49 sha1 = "17ee79cad21c9720ee07b3a991fab5103b513514";
48 url = "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.1.tgz";
49 sha1 = "3bbdec0b75d12ceaa55d62943625c0b0861cdf6f";
50 50 };
51 51 };
52 52 "grunt-contrib-watch-0.6.1" = {
53 53 name = "grunt-contrib-watch";
54 54 packageName = "grunt-contrib-watch";
55 55 version = "0.6.1";
56 56 src = fetchurl {
57 57 url = "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz";
58 58 sha1 = "64fdcba25a635f5b4da1b6ce6f90da0aeb6e3f15";
59 59 };
60 60 };
61 "crisper-2.0.2" = {
61 "crisper-2.1.1" = {
62 62 name = "crisper";
63 63 packageName = "crisper";
64 version = "2.0.2";
64 version = "2.1.1";
65 65 src = fetchurl {
66 url = "https://registry.npmjs.org/crisper/-/crisper-2.0.2.tgz";
67 sha1 = "188a7da3d00dcf0c64eff7f253d23dacffba7197";
66 url = "https://registry.npmjs.org/crisper/-/crisper-2.1.1.tgz";
67 sha1 = "4cc7321c3e90f3c5cbdc3503217f118fd7d5c51c";
68 68 };
69 69 };
70 "vulcanize-1.14.8" = {
70 "vulcanize-1.16.0" = {
71 71 name = "vulcanize";
72 72 packageName = "vulcanize";
73 version = "1.14.8";
73 version = "1.16.0";
74 74 src = fetchurl {
75 url = "https://registry.npmjs.org/vulcanize/-/vulcanize-1.14.8.tgz";
76 sha1 = "3cdd6f81d9baf2c5796ddd6d2d289e45975086f7";
75 url = "https://registry.npmjs.org/vulcanize/-/vulcanize-1.16.0.tgz";
76 sha1 = "b0ce3b0044d194ad4908ae4f1a6c6110a6e4d5e6";
77 77 };
78 78 };
79 79 "grunt-crisper-1.0.1" = {
80 80 name = "grunt-crisper";
81 81 packageName = "grunt-crisper";
82 82 version = "1.0.1";
83 83 src = fetchurl {
84 84 url = "https://registry.npmjs.org/grunt-crisper/-/grunt-crisper-1.0.1.tgz";
85 85 sha1 = "e7c091dcaff10deb0091e3035ca7e54008991fe7";
86 86 };
87 87 };
88 88 "grunt-vulcanize-1.0.0" = {
89 89 name = "grunt-vulcanize";
90 90 packageName = "grunt-vulcanize";
91 91 version = "1.0.0";
92 92 src = fetchurl {
93 93 url = "https://registry.npmjs.org/grunt-vulcanize/-/grunt-vulcanize-1.0.0.tgz";
94 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 107 name = "jshint";
99 108 packageName = "jshint";
100 version = "2.9.3";
109 version = "2.9.5";
101 110 src = fetchurl {
102 url = "https://registry.npmjs.org/jshint/-/jshint-2.9.3.tgz";
103 sha1 = "a2e14ff85c2d6bf8c8080e5aa55129ebc6a2d320";
111 url = "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz";
112 sha1 = "1e7252915ce681b40827ee14248c46d34e9aa62c";
104 113 };
105 114 };
106 "bower-1.7.9" = {
115 "bower-1.8.2" = {
107 116 name = "bower";
108 117 packageName = "bower";
109 version = "1.7.9";
118 version = "1.8.2";
110 119 src = fetchurl {
111 url = "https://registry.npmjs.org/bower/-/bower-1.7.9.tgz";
112 sha1 = "b7296c2393e0d75edaa6ca39648132dd255812b0";
120 url = "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz";
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 133 "favico.js-0.3.10" = {
116 134 name = "favico.js";
117 135 packageName = "favico.js";
118 136 version = "0.3.10";
119 137 src = fetchurl {
120 138 url = "https://registry.npmjs.org/favico.js/-/favico.js-0.3.10.tgz";
121 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 170 name = "appenlight-client";
126 171 packageName = "appenlight-client";
127 version = "0.5.0";
172 version = "0.5.1";
128 173 src = fetchgit {
129 174 url = "https://git@github.com/AppEnlight/appenlight-client-js.git";
130 rev = "b1d6853345dc3e96468b34537810b3eb77e0764f";
131 sha256 = "2ef00aef7dafdecdc1666d2e83fc190a796849985d04a8f0fad148d64aa4f8db";
175 rev = "14712c64c230fbbe94fcbc8094aef5eb3b90b307";
176 sha256 = "92111f1104cbf0b31303c366c0fa752cf68af7ddde40d0161edd1b5fd9dd07f7";
132 177 };
133 178 };
134 179 "async-0.1.22" = {
135 180 name = "async";
136 181 packageName = "async";
137 182 version = "0.1.22";
138 183 src = fetchurl {
139 184 url = "https://registry.npmjs.org/async/-/async-0.1.22.tgz";
140 185 sha1 = "0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061";
141 186 };
142 187 };
143 188 "coffee-script-1.3.3" = {
144 189 name = "coffee-script";
145 190 packageName = "coffee-script";
146 191 version = "1.3.3";
147 192 src = fetchurl {
148 193 url = "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz";
149 194 sha1 = "150d6b4cb522894369efed6a2101c20bc7f4a4f4";
150 195 };
151 196 };
152 197 "colors-0.6.2" = {
153 198 name = "colors";
154 199 packageName = "colors";
155 200 version = "0.6.2";
156 201 src = fetchurl {
157 202 url = "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz";
158 203 sha1 = "2423fe6678ac0c5dae8852e5d0e5be08c997abcc";
159 204 };
160 205 };
161 206 "dateformat-1.0.2-1.2.3" = {
162 207 name = "dateformat";
163 208 packageName = "dateformat";
164 209 version = "1.0.2-1.2.3";
165 210 src = fetchurl {
166 211 url = "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz";
167 212 sha1 = "b0220c02de98617433b72851cf47de3df2cdbee9";
168 213 };
169 214 };
170 215 "eventemitter2-0.4.14" = {
171 216 name = "eventemitter2";
172 217 packageName = "eventemitter2";
173 218 version = "0.4.14";
174 219 src = fetchurl {
175 220 url = "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz";
176 221 sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab";
177 222 };
178 223 };
179 224 "findup-sync-0.1.3" = {
180 225 name = "findup-sync";
181 226 packageName = "findup-sync";
182 227 version = "0.1.3";
183 228 src = fetchurl {
184 229 url = "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz";
185 230 sha1 = "7f3e7a97b82392c653bf06589bd85190e93c3683";
186 231 };
187 232 };
188 233 "glob-3.1.21" = {
189 234 name = "glob";
190 235 packageName = "glob";
191 236 version = "3.1.21";
192 237 src = fetchurl {
193 238 url = "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz";
194 239 sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd";
195 240 };
196 241 };
197 242 "hooker-0.2.3" = {
198 243 name = "hooker";
199 244 packageName = "hooker";
200 245 version = "0.2.3";
201 246 src = fetchurl {
202 247 url = "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz";
203 248 sha1 = "b834f723cc4a242aa65963459df6d984c5d3d959";
204 249 };
205 250 };
206 251 "iconv-lite-0.2.11" = {
207 252 name = "iconv-lite";
208 253 packageName = "iconv-lite";
209 254 version = "0.2.11";
210 255 src = fetchurl {
211 256 url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz";
212 257 sha1 = "1ce60a3a57864a292d1321ff4609ca4bb965adc8";
213 258 };
214 259 };
215 260 "minimatch-0.2.14" = {
216 261 name = "minimatch";
217 262 packageName = "minimatch";
218 263 version = "0.2.14";
219 264 src = fetchurl {
220 265 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
221 266 sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
222 267 };
223 268 };
224 269 "nopt-1.0.10" = {
225 270 name = "nopt";
226 271 packageName = "nopt";
227 272 version = "1.0.10";
228 273 src = fetchurl {
229 274 url = "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz";
230 275 sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee";
231 276 };
232 277 };
233 278 "rimraf-2.2.8" = {
234 279 name = "rimraf";
235 280 packageName = "rimraf";
236 281 version = "2.2.8";
237 282 src = fetchurl {
238 283 url = "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
239 284 sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
240 285 };
241 286 };
242 287 "lodash-0.9.2" = {
243 288 name = "lodash";
244 289 packageName = "lodash";
245 290 version = "0.9.2";
246 291 src = fetchurl {
247 292 url = "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz";
248 293 sha1 = "8f3499c5245d346d682e5b0d3b40767e09f1a92c";
249 294 };
250 295 };
251 296 "underscore.string-2.2.1" = {
252 297 name = "underscore.string";
253 298 packageName = "underscore.string";
254 299 version = "2.2.1";
255 300 src = fetchurl {
256 301 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz";
257 302 sha1 = "d7c0fa2af5d5a1a67f4253daee98132e733f0f19";
258 303 };
259 304 };
260 305 "which-1.0.9" = {
261 306 name = "which";
262 307 packageName = "which";
263 308 version = "1.0.9";
264 309 src = fetchurl {
265 310 url = "https://registry.npmjs.org/which/-/which-1.0.9.tgz";
266 311 sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
267 312 };
268 313 };
269 314 "js-yaml-2.0.5" = {
270 315 name = "js-yaml";
271 316 packageName = "js-yaml";
272 317 version = "2.0.5";
273 318 src = fetchurl {
274 319 url = "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz";
275 320 sha1 = "a25ae6509999e97df278c6719da11bd0687743a8";
276 321 };
277 322 };
278 323 "exit-0.1.2" = {
279 324 name = "exit";
280 325 packageName = "exit";
281 326 version = "0.1.2";
282 327 src = fetchurl {
283 328 url = "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
284 329 sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
285 330 };
286 331 };
287 332 "getobject-0.1.0" = {
288 333 name = "getobject";
289 334 packageName = "getobject";
290 335 version = "0.1.0";
291 336 src = fetchurl {
292 337 url = "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz";
293 338 sha1 = "047a449789fa160d018f5486ed91320b6ec7885c";
294 339 };
295 340 };
296 341 "grunt-legacy-util-0.2.0" = {
297 342 name = "grunt-legacy-util";
298 343 packageName = "grunt-legacy-util";
299 344 version = "0.2.0";
300 345 src = fetchurl {
301 346 url = "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz";
302 347 sha1 = "93324884dbf7e37a9ff7c026dff451d94a9e554b";
303 348 };
304 349 };
305 350 "grunt-legacy-log-0.1.3" = {
306 351 name = "grunt-legacy-log";
307 352 packageName = "grunt-legacy-log";
308 353 version = "0.1.3";
309 354 src = fetchurl {
310 355 url = "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz";
311 356 sha1 = "ec29426e803021af59029f87d2f9cd7335a05531";
312 357 };
313 358 };
314 359 "glob-3.2.11" = {
315 360 name = "glob";
316 361 packageName = "glob";
317 362 version = "3.2.11";
318 363 src = fetchurl {
319 364 url = "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz";
320 365 sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d";
321 366 };
322 367 };
323 368 "lodash-2.4.2" = {
324 369 name = "lodash";
325 370 packageName = "lodash";
326 371 version = "2.4.2";
327 372 src = fetchurl {
328 373 url = "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz";
329 374 sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e";
330 375 };
331 376 };
332 377 "inherits-2.0.3" = {
333 378 name = "inherits";
334 379 packageName = "inherits";
335 380 version = "2.0.3";
336 381 src = fetchurl {
337 382 url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
338 383 sha1 = "633c2c83e3da42a502f52466022480f4208261de";
339 384 };
340 385 };
341 386 "minimatch-0.3.0" = {
342 387 name = "minimatch";
343 388 packageName = "minimatch";
344 389 version = "0.3.0";
345 390 src = fetchurl {
346 391 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz";
347 392 sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd";
348 393 };
349 394 };
350 395 "lru-cache-2.7.3" = {
351 396 name = "lru-cache";
352 397 packageName = "lru-cache";
353 398 version = "2.7.3";
354 399 src = fetchurl {
355 400 url = "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz";
356 401 sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952";
357 402 };
358 403 };
359 404 "sigmund-1.0.1" = {
360 405 name = "sigmund";
361 406 packageName = "sigmund";
362 407 version = "1.0.1";
363 408 src = fetchurl {
364 409 url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
365 410 sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
366 411 };
367 412 };
368 413 "graceful-fs-1.2.3" = {
369 414 name = "graceful-fs";
370 415 packageName = "graceful-fs";
371 416 version = "1.2.3";
372 417 src = fetchurl {
373 418 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
374 419 sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
375 420 };
376 421 };
377 422 "inherits-1.0.2" = {
378 423 name = "inherits";
379 424 packageName = "inherits";
380 425 version = "1.0.2";
381 426 src = fetchurl {
382 427 url = "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
383 428 sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
384 429 };
385 430 };
386 "abbrev-1.0.9" = {
431 "abbrev-1.1.0" = {
387 432 name = "abbrev";
388 433 packageName = "abbrev";
389 version = "1.0.9";
434 version = "1.1.0";
390 435 src = fetchurl {
391 url = "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz";
392 sha1 = "91b4792588a7738c25f35dd6f63752a2f8776135";
436 url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz";
437 sha1 = "d0554c2256636e2f56e7c2e5ad183f859428d81f";
393 438 };
394 439 };
395 440 "argparse-0.1.16" = {
396 441 name = "argparse";
397 442 packageName = "argparse";
398 443 version = "0.1.16";
399 444 src = fetchurl {
400 445 url = "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
401 446 sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
402 447 };
403 448 };
404 449 "esprima-1.0.4" = {
405 450 name = "esprima";
406 451 packageName = "esprima";
407 452 version = "1.0.4";
408 453 src = fetchurl {
409 454 url = "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz";
410 455 sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad";
411 456 };
412 457 };
413 458 "underscore-1.7.0" = {
414 459 name = "underscore";
415 460 packageName = "underscore";
416 461 version = "1.7.0";
417 462 src = fetchurl {
418 463 url = "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
419 464 sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
420 465 };
421 466 };
422 467 "underscore.string-2.4.0" = {
423 468 name = "underscore.string";
424 469 packageName = "underscore.string";
425 470 version = "2.4.0";
426 471 src = fetchurl {
427 472 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
428 473 sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
429 474 };
430 475 };
431 476 "grunt-legacy-log-utils-0.1.1" = {
432 477 name = "grunt-legacy-log-utils";
433 478 packageName = "grunt-legacy-log-utils";
434 479 version = "0.1.1";
435 480 src = fetchurl {
436 481 url = "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz";
437 482 sha1 = "c0706b9dd9064e116f36f23fe4e6b048672c0f7e";
438 483 };
439 484 };
440 485 "underscore.string-2.3.3" = {
441 486 name = "underscore.string";
442 487 packageName = "underscore.string";
443 488 version = "2.3.3";
444 489 src = fetchurl {
445 490 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz";
446 491 sha1 = "71c08bf6b428b1133f37e78fa3a21c82f7329b0d";
447 492 };
448 493 };
449 494 "chalk-1.1.3" = {
450 495 name = "chalk";
451 496 packageName = "chalk";
452 497 version = "1.1.3";
453 498 src = fetchurl {
454 499 url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
455 500 sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
456 501 };
457 502 };
458 503 "file-sync-cmp-0.1.1" = {
459 504 name = "file-sync-cmp";
460 505 packageName = "file-sync-cmp";
461 506 version = "0.1.1";
462 507 src = fetchurl {
463 508 url = "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz";
464 509 sha1 = "a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b";
465 510 };
466 511 };
467 512 "ansi-styles-2.2.1" = {
468 513 name = "ansi-styles";
469 514 packageName = "ansi-styles";
470 515 version = "2.2.1";
471 516 src = fetchurl {
472 517 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
473 518 sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
474 519 };
475 520 };
476 521 "escape-string-regexp-1.0.5" = {
477 522 name = "escape-string-regexp";
478 523 packageName = "escape-string-regexp";
479 524 version = "1.0.5";
480 525 src = fetchurl {
481 526 url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
482 527 sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
483 528 };
484 529 };
485 530 "has-ansi-2.0.0" = {
486 531 name = "has-ansi";
487 532 packageName = "has-ansi";
488 533 version = "2.0.0";
489 534 src = fetchurl {
490 535 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
491 536 sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
492 537 };
493 538 };
494 539 "strip-ansi-3.0.1" = {
495 540 name = "strip-ansi";
496 541 packageName = "strip-ansi";
497 542 version = "3.0.1";
498 543 src = fetchurl {
499 544 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
500 545 sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
501 546 };
502 547 };
503 548 "supports-color-2.0.0" = {
504 549 name = "supports-color";
505 550 packageName = "supports-color";
506 551 version = "2.0.0";
507 552 src = fetchurl {
508 553 url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
509 554 sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
510 555 };
511 556 };
512 "ansi-regex-2.0.0" = {
557 "ansi-regex-2.1.1" = {
513 558 name = "ansi-regex";
514 559 packageName = "ansi-regex";
515 version = "2.0.0";
560 version = "2.1.1";
516 561 src = fetchurl {
517 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";
518 sha1 = "c5061b6e0ef8a81775e50f5d66151bf6bf371107";
562 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
563 sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
519 564 };
520 565 };
521 566 "chalk-0.5.1" = {
522 567 name = "chalk";
523 568 packageName = "chalk";
524 569 version = "0.5.1";
525 570 src = fetchurl {
526 571 url = "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz";
527 572 sha1 = "663b3a648b68b55d04690d49167aa837858f2174";
528 573 };
529 574 };
530 575 "source-map-0.3.0" = {
531 576 name = "source-map";
532 577 packageName = "source-map";
533 578 version = "0.3.0";
534 579 src = fetchurl {
535 580 url = "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz";
536 581 sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9";
537 582 };
538 583 };
539 584 "ansi-styles-1.1.0" = {
540 585 name = "ansi-styles";
541 586 packageName = "ansi-styles";
542 587 version = "1.1.0";
543 588 src = fetchurl {
544 589 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz";
545 590 sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de";
546 591 };
547 592 };
548 593 "has-ansi-0.1.0" = {
549 594 name = "has-ansi";
550 595 packageName = "has-ansi";
551 596 version = "0.1.0";
552 597 src = fetchurl {
553 598 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz";
554 599 sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e";
555 600 };
556 601 };
557 602 "strip-ansi-0.3.0" = {
558 603 name = "strip-ansi";
559 604 packageName = "strip-ansi";
560 605 version = "0.3.0";
561 606 src = fetchurl {
562 607 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz";
563 608 sha1 = "25f48ea22ca79187f3174a4db8759347bb126220";
564 609 };
565 610 };
566 611 "supports-color-0.2.0" = {
567 612 name = "supports-color";
568 613 packageName = "supports-color";
569 614 version = "0.2.0";
570 615 src = fetchurl {
571 616 url = "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz";
572 617 sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a";
573 618 };
574 619 };
575 620 "ansi-regex-0.2.1" = {
576 621 name = "ansi-regex";
577 622 packageName = "ansi-regex";
578 623 version = "0.2.1";
579 624 src = fetchurl {
580 625 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz";
581 626 sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9";
582 627 };
583 628 };
584 "amdefine-1.0.0" = {
629 "amdefine-1.0.1" = {
585 630 name = "amdefine";
586 631 packageName = "amdefine";
587 version = "1.0.0";
632 version = "1.0.1";
588 633 src = fetchurl {
589 url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";
590 sha1 = "fd17474700cb5cc9c2b709f0be9d23ce3c198c33";
634 url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz";
635 sha1 = "4a5282ac164729e93619bcfd3ad151f817ce91f5";
591 636 };
592 637 };
593 "async-2.0.1" = {
638 "async-2.5.0" = {
594 639 name = "async";
595 640 packageName = "async";
596 version = "2.0.1";
641 version = "2.5.0";
597 642 src = fetchurl {
598 url = "https://registry.npmjs.org/async/-/async-2.0.1.tgz";
599 sha1 = "b709cc0280a9c36f09f4536be823c838a9049e25";
643 url = "https://registry.npmjs.org/async/-/async-2.5.0.tgz";
644 sha1 = "843190fd6b7357a0b9e1c956edddd5ec8462b54d";
600 645 };
601 646 };
602 "less-2.7.1" = {
647 "less-2.7.2" = {
603 648 name = "less";
604 649 packageName = "less";
605 version = "2.7.1";
650 version = "2.7.2";
606 651 src = fetchurl {
607 url = "https://registry.npmjs.org/less/-/less-2.7.1.tgz";
608 sha1 = "6cbfea22b3b830304e9a5fb371d54fa480c9d7cf";
652 url = "https://registry.npmjs.org/less/-/less-2.7.2.tgz";
653 sha1 = "368d6cc73e1fb03981183280918743c5dcf9b3df";
609 654 };
610 655 };
611 "lodash-4.16.2" = {
656 "lodash-4.17.4" = {
612 657 name = "lodash";
613 658 packageName = "lodash";
614 version = "4.16.2";
659 version = "4.17.4";
615 660 src = fetchurl {
616 url = "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz";
617 sha1 = "3e626db827048a699281a8a125226326cfc0e652";
661 url = "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz";
662 sha1 = "78203a4d1c328ae1d86dca6460e369b57f4055ae";
618 663 };
619 664 };
620 665 "errno-0.1.4" = {
621 666 name = "errno";
622 667 packageName = "errno";
623 668 version = "0.1.4";
624 669 src = fetchurl {
625 670 url = "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz";
626 671 sha1 = "b896e23a9e5e8ba33871fc996abd3635fc9a1c7d";
627 672 };
628 673 };
629 "graceful-fs-4.1.8" = {
674 "graceful-fs-4.1.11" = {
630 675 name = "graceful-fs";
631 676 packageName = "graceful-fs";
632 version = "4.1.8";
677 version = "4.1.11";
633 678 src = fetchurl {
634 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.8.tgz";
635 sha1 = "da3e11135eb2168bdd374532c4e2649751672890";
679 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz";
680 sha1 = "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658";
636 681 };
637 682 };
638 "image-size-0.5.0" = {
683 "image-size-0.5.5" = {
639 684 name = "image-size";
640 685 packageName = "image-size";
641 version = "0.5.0";
686 version = "0.5.5";
642 687 src = fetchurl {
643 url = "https://registry.npmjs.org/image-size/-/image-size-0.5.0.tgz";
644 sha1 = "be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651";
688 url = "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz";
689 sha1 = "09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c";
645 690 };
646 691 };
647 "mime-1.3.4" = {
692 "mime-1.4.0" = {
648 693 name = "mime";
649 694 packageName = "mime";
650 version = "1.3.4";
695 version = "1.4.0";
651 696 src = fetchurl {
652 url = "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz";
653 sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53";
697 url = "https://registry.npmjs.org/mime/-/mime-1.4.0.tgz";
698 sha1 = "69e9e0db51d44f2a3b56e48b7817d7d137f1a343";
654 699 };
655 700 };
656 701 "mkdirp-0.5.1" = {
657 702 name = "mkdirp";
658 703 packageName = "mkdirp";
659 704 version = "0.5.1";
660 705 src = fetchurl {
661 706 url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
662 707 sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
663 708 };
664 709 };
665 "promise-7.1.1" = {
710 "promise-7.3.1" = {
666 711 name = "promise";
667 712 packageName = "promise";
668 version = "7.1.1";
713 version = "7.3.1";
669 714 src = fetchurl {
670 url = "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz";
671 sha1 = "489654c692616b8aa55b0724fa809bb7db49c5bf";
715 url = "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz";
716 sha1 = "064b72602b18f90f29192b8b1bc418ffd1ebd3bf";
672 717 };
673 718 };
674 "source-map-0.5.6" = {
719 "source-map-0.5.7" = {
675 720 name = "source-map";
676 721 packageName = "source-map";
677 version = "0.5.6";
722 version = "0.5.7";
678 723 src = fetchurl {
679 url = "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz";
680 sha1 = "75ce38f52bf0733c5a7f0c118d81334a2bb5f412";
724 url = "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz";
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 737 "prr-0.0.0" = {
684 738 name = "prr";
685 739 packageName = "prr";
686 740 version = "0.0.0";
687 741 src = fetchurl {
688 742 url = "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz";
689 743 sha1 = "1a84b85908325501411853d0081ee3fa86e2926a";
690 744 };
691 745 };
692 746 "minimist-0.0.8" = {
693 747 name = "minimist";
694 748 packageName = "minimist";
695 749 version = "0.0.8";
696 750 src = fetchurl {
697 751 url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
698 752 sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
699 753 };
700 754 };
701 "asap-2.0.5" = {
755 "asap-2.0.6" = {
702 756 name = "asap";
703 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 993 src = fetchurl {
706 url = "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz";
707 sha1 = "522765b50c3510490e52d7dcfe085ef9ba96958f";
994 url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
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 1232 "gaze-0.5.2" = {
711 1233 name = "gaze";
712 1234 packageName = "gaze";
713 1235 version = "0.5.2";
714 1236 src = fetchurl {
715 1237 url = "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz";
716 1238 sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f";
717 1239 };
718 1240 };
719 1241 "tiny-lr-fork-0.0.5" = {
720 1242 name = "tiny-lr-fork";
721 1243 packageName = "tiny-lr-fork";
722 1244 version = "0.0.5";
723 1245 src = fetchurl {
724 1246 url = "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz";
725 1247 sha1 = "1e99e1e2a8469b736ab97d97eefa98c71f76ed0a";
726 1248 };
727 1249 };
728 1250 "async-0.2.10" = {
729 1251 name = "async";
730 1252 packageName = "async";
731 1253 version = "0.2.10";
732 1254 src = fetchurl {
733 1255 url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
734 1256 sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
735 1257 };
736 1258 };
737 1259 "globule-0.1.0" = {
738 1260 name = "globule";
739 1261 packageName = "globule";
740 1262 version = "0.1.0";
741 1263 src = fetchurl {
742 1264 url = "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz";
743 1265 sha1 = "d9c8edde1da79d125a151b79533b978676346ae5";
744 1266 };
745 1267 };
746 1268 "lodash-1.0.2" = {
747 1269 name = "lodash";
748 1270 packageName = "lodash";
749 1271 version = "1.0.2";
750 1272 src = fetchurl {
751 1273 url = "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz";
752 1274 sha1 = "8f57560c83b59fc270bd3d561b690043430e2551";
753 1275 };
754 1276 };
755 1277 "qs-0.5.6" = {
756 1278 name = "qs";
757 1279 packageName = "qs";
758 1280 version = "0.5.6";
759 1281 src = fetchurl {
760 1282 url = "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz";
761 1283 sha1 = "31b1ad058567651c526921506b9a8793911a0384";
762 1284 };
763 1285 };
764 1286 "faye-websocket-0.4.4" = {
765 1287 name = "faye-websocket";
766 1288 packageName = "faye-websocket";
767 1289 version = "0.4.4";
768 1290 src = fetchurl {
769 1291 url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz";
770 1292 sha1 = "c14c5b3bf14d7417ffbfd990c0a7495cd9f337bc";
771 1293 };
772 1294 };
773 1295 "noptify-0.0.3" = {
774 1296 name = "noptify";
775 1297 packageName = "noptify";
776 1298 version = "0.0.3";
777 1299 src = fetchurl {
778 1300 url = "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz";
779 1301 sha1 = "58f654a73d9753df0c51d9686dc92104a67f4bbb";
780 1302 };
781 1303 };
782 1304 "debug-0.7.4" = {
783 1305 name = "debug";
784 1306 packageName = "debug";
785 1307 version = "0.7.4";
786 1308 src = fetchurl {
787 1309 url = "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz";
788 1310 sha1 = "06e1ea8082c2cb14e39806e22e2f6f757f92af39";
789 1311 };
790 1312 };
791 1313 "nopt-2.0.0" = {
792 1314 name = "nopt";
793 1315 packageName = "nopt";
794 1316 version = "2.0.0";
795 1317 src = fetchurl {
796 1318 url = "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz";
797 1319 sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d";
798 1320 };
799 1321 };
800 "command-line-args-2.1.6" = {
1322 "command-line-args-3.0.5" = {
801 1323 name = "command-line-args";
802 1324 packageName = "command-line-args";
803 version = "2.1.6";
1325 version = "3.0.5";
804 1326 src = fetchurl {
805 url = "https://registry.npmjs.org/command-line-args/-/command-line-args-2.1.6.tgz";
806 sha1 = "f197d6eaff34c9085577484b2864375b294f5697";
1327 url = "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz";
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 1340 "dom5-1.3.6" = {
810 1341 name = "dom5";
811 1342 packageName = "dom5";
812 1343 version = "1.3.6";
813 1344 src = fetchurl {
814 1345 url = "https://registry.npmjs.org/dom5/-/dom5-1.3.6.tgz";
815 1346 sha1 = "a7088a9fc5f3b08dc9f6eda4c7abaeb241945e0d";
816 1347 };
817 1348 };
818 "array-back-1.0.3" = {
1349 "array-back-1.0.4" = {
819 1350 name = "array-back";
820 1351 packageName = "array-back";
821 version = "1.0.3";
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";
1352 version = "1.0.4";
831 1353 src = fetchurl {
832 url = "https://registry.npmjs.org/command-line-usage/-/command-line-usage-2.0.5.tgz";
833 sha1 = "f80c35ca5e8624841923ea3be3b9bfbf4f7be27b";
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";
1354 url = "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz";
1355 sha1 = "644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b";
843 1356 };
844 1357 };
845 1358 "feature-detect-es6-1.3.1" = {
846 1359 name = "feature-detect-es6";
847 1360 packageName = "feature-detect-es6";
848 1361 version = "1.3.1";
849 1362 src = fetchurl {
850 1363 url = "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz";
851 1364 sha1 = "f888736af9cb0c91f55663bfa4762eb96ee7047f";
852 1365 };
853 1366 };
854 "find-replace-1.0.2" = {
1367 "find-replace-1.0.3" = {
855 1368 name = "find-replace";
856 1369 packageName = "find-replace";
857 version = "1.0.2";
858 src = fetchurl {
859 url = "https://registry.npmjs.org/find-replace/-/find-replace-1.0.2.tgz";
860 sha1 = "a2d6ce740d15f0d92b1b26763e2ce9c0e361fd98";
861 };
862 };
863 "typical-2.6.0" = {
864 name = "typical";
865 packageName = "typical";
866 version = "2.6.0";
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";
1370 version = "1.0.3";
885 1371 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";
1372 url = "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz";
1373 sha1 = "b88e7364d2d9c959559f388c66670d6130441fa0";
915 1374 };
916 1375 };
917 "stream-via-0.1.1" = {
918 name = "stream-via";
919 packageName = "stream-via";
920 version = "0.1.1";
921 src = fetchurl {
922 url = "https://registry.npmjs.org/stream-via/-/stream-via-0.1.1.tgz";
923 sha1 = "0cee5df9c959fb1d3f4eda4819f289d5f9205afc";
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";
1376 "typical-2.6.1" = {
1377 name = "typical";
1378 packageName = "typical";
1379 version = "2.6.1";
948 1380 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";
1381 url = "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz";
1382 sha1 = "5c080e5d661cbbe38259d2e70a3c7253e873881d";
987 1383 };
988 1384 };
989 1385 "test-value-2.1.0" = {
990 1386 name = "test-value";
991 1387 packageName = "test-value";
992 1388 version = "2.1.0";
993 1389 src = fetchurl {
994 1390 url = "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz";
995 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 1448 "@types/clone-0.1.30" = {
999 1449 name = "@types/clone";
1000 1450 packageName = "@types/clone";
1001 1451 version = "0.1.30";
1002 1452 src = fetchurl {
1003 1453 url = "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz";
1004 1454 sha1 = "e7365648c1b42136a59c7d5040637b3b5c83b614";
1005 1455 };
1006 1456 };
1007 "@types/node-4.0.30" = {
1457 "@types/node-4.2.20" = {
1008 1458 name = "@types/node";
1009 1459 packageName = "@types/node";
1010 version = "4.0.30";
1460 version = "4.2.20";
1011 1461 src = fetchurl {
1012 url = "https://registry.npmjs.org/@types/node/-/node-4.0.30.tgz";
1013 sha1 = "553f490ed3030311620f88003e7abfc0edcb301e";
1462 url = "https://registry.npmjs.org/@types/node/-/node-4.2.20.tgz";
1463 sha1 = "3f7dceff43e07cfff4407fc3495d98a533b32267";
1014 1464 };
1015 1465 };
1016 1466 "@types/parse5-0.0.31" = {
1017 1467 name = "@types/parse5";
1018 1468 packageName = "@types/parse5";
1019 1469 version = "0.0.31";
1020 1470 src = fetchurl {
1021 1471 url = "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.31.tgz";
1022 1472 sha1 = "e827a493a443b156e1b582a2e4c3bdc0040f2ee7";
1023 1473 };
1024 1474 };
1025 1475 "clone-1.0.2" = {
1026 1476 name = "clone";
1027 1477 packageName = "clone";
1028 1478 version = "1.0.2";
1029 1479 src = fetchurl {
1030 1480 url = "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz";
1031 1481 sha1 = "260b7a99ebb1edfe247538175f783243cb19d149";
1032 1482 };
1033 1483 };
1034 1484 "parse5-1.5.1" = {
1035 1485 name = "parse5";
1036 1486 packageName = "parse5";
1037 1487 version = "1.5.1";
1038 1488 src = fetchurl {
1039 1489 url = "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz";
1040 1490 sha1 = "9b7f3b0de32be78dc2401b17573ccaf0f6f59d94";
1041 1491 };
1042 1492 };
1043 "@types/node-6.0.41" = {
1493 "@types/node-6.0.88" = {
1044 1494 name = "@types/node";
1045 1495 packageName = "@types/node";
1046 version = "6.0.41";
1496 version = "6.0.88";
1047 1497 src = fetchurl {
1048 url = "https://registry.npmjs.org/@types/node/-/node-6.0.41.tgz";
1049 sha1 = "578cf53aaec65887bcaf16792f8722932e8ff8ea";
1498 url = "https://registry.npmjs.org/@types/node/-/node-6.0.88.tgz";
1499 sha1 = "f618f11a944f6a18d92b5c472028728a3e3d4b66";
1050 1500 };
1051 1501 };
1052 1502 "es6-promise-2.3.0" = {
1053 1503 name = "es6-promise";
1054 1504 packageName = "es6-promise";
1055 1505 version = "2.3.0";
1056 1506 src = fetchurl {
1057 1507 url = "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz";
1058 1508 sha1 = "96edb9f2fdb01995822b263dd8aadab6748181bc";
1059 1509 };
1060 1510 };
1061 "hydrolysis-1.24.1" = {
1511 "hydrolysis-1.25.0" = {
1062 1512 name = "hydrolysis";
1063 1513 packageName = "hydrolysis";
1064 version = "1.24.1";
1514 version = "1.25.0";
1065 1515 src = fetchurl {
1066 url = "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.24.1.tgz";
1067 sha1 = "0f94f055d1065ac0d81ff40b762d143fef07eff4";
1516 url = "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.25.0.tgz";
1517 sha1 = "a4fb14a37a1e03b0db52d8aaa57c682272a14d84";
1068 1518 };
1069 1519 };
1070 1520 "nopt-3.0.6" = {
1071 1521 name = "nopt";
1072 1522 packageName = "nopt";
1073 1523 version = "3.0.6";
1074 1524 src = fetchurl {
1075 1525 url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
1076 1526 sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
1077 1527 };
1078 1528 };
1079 1529 "path-posix-1.0.0" = {
1080 1530 name = "path-posix";
1081 1531 packageName = "path-posix";
1082 1532 version = "1.0.0";
1083 1533 src = fetchurl {
1084 1534 url = "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz";
1085 1535 sha1 = "06b26113f56beab042545a23bfa88003ccac260f";
1086 1536 };
1087 1537 };
1088 "update-notifier-0.6.3" = {
1089 name = "update-notifier";
1090 packageName = "update-notifier";
1091 version = "0.6.3";
1538 "acorn-3.3.0" = {
1539 name = "acorn";
1540 packageName = "acorn";
1541 version = "3.3.0";
1092 1542 src = fetchurl {
1093 url = "https://registry.npmjs.org/update-notifier/-/update-notifier-0.6.3.tgz";
1094 sha1 = "776dec8daa13e962a341e8a1d98354306b67ae08";
1543 url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
1544 sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
1095 1545 };
1096 1546 };
1097 "babel-polyfill-6.13.0" = {
1547 "babel-polyfill-6.26.0" = {
1098 1548 name = "babel-polyfill";
1099 1549 packageName = "babel-polyfill";
1100 version = "6.13.0";
1550 version = "6.26.0";
1101 1551 src = fetchurl {
1102 url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.13.0.tgz";
1103 sha1 = "5978215c25d49a697eb78afc54e63c9d3a73d5ec";
1552 url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz";
1553 sha1 = "379937abc67d7895970adc621f284cd966cf2153";
1104 1554 };
1105 1555 };
1106 1556 "doctrine-0.7.2" = {
1107 1557 name = "doctrine";
1108 1558 packageName = "doctrine";
1109 1559 version = "0.7.2";
1110 1560 src = fetchurl {
1111 1561 url = "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz";
1112 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 1575 name = "escodegen";
1117 1576 packageName = "escodegen";
1118 version = "1.8.1";
1577 version = "1.9.0";
1119 1578 src = fetchurl {
1120 url = "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz";
1121 sha1 = "5a5b53af4693110bebb0867aa3430dd3b70a1018";
1579 url = "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz";
1580 sha1 = "9811a2f265dc1cd3894420ee3717064b632b8852";
1122 1581 };
1123 1582 };
1124 "espree-3.3.1" = {
1583 "espree-3.5.1" = {
1125 1584 name = "espree";
1126 1585 packageName = "espree";
1127 version = "3.3.1";
1586 version = "3.5.1";
1128 1587 src = fetchurl {
1129 url = "https://registry.npmjs.org/espree/-/espree-3.3.1.tgz";
1130 sha1 = "42107376856738a65ff3b5877f3a58bd52497643";
1588 url = "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz";
1589 sha1 = "0c988b8ab46db53100a1954ae4ba995ddd27d87e";
1131 1590 };
1132 1591 };
1133 1592 "estraverse-3.1.0" = {
1134 1593 name = "estraverse";
1135 1594 packageName = "estraverse";
1136 1595 version = "3.1.0";
1137 1596 src = fetchurl {
1138 1597 url = "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz";
1139 1598 sha1 = "15e28a446b8b82bc700ccc8b96c78af4da0d6cba";
1140 1599 };
1141 1600 };
1142 "path-is-absolute-1.0.0" = {
1601 "path-is-absolute-1.0.1" = {
1143 1602 name = "path-is-absolute";
1144 1603 packageName = "path-is-absolute";
1145 version = "1.0.0";
1604 version = "1.0.1";
1146 1605 src = fetchurl {
1147 url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz";
1148 sha1 = "263dada66ab3f2fb10bf7f9d24dd8f3e570ef912";
1606 url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
1607 sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
1149 1608 };
1150 1609 };
1151 "babel-runtime-6.11.6" = {
1610 "babel-runtime-6.26.0" = {
1152 1611 name = "babel-runtime";
1153 1612 packageName = "babel-runtime";
1154 version = "6.11.6";
1613 version = "6.26.0";
1155 1614 src = fetchurl {
1156 url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.11.6.tgz";
1157 sha1 = "6db707fef2d49c49bfa3cb64efdb436b518b8222";
1615 url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz";
1616 sha1 = "965c7058668e82b55d7bfe04ff2337bc8b5647fe";
1158 1617 };
1159 1618 };
1160 "regenerator-runtime-0.9.5" = {
1619 "regenerator-runtime-0.10.5" = {
1161 1620 name = "regenerator-runtime";
1162 1621 packageName = "regenerator-runtime";
1163 version = "0.9.5";
1622 version = "0.10.5";
1164 1623 src = fetchurl {
1165 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz";
1166 sha1 = "403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc";
1624 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz";
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 1637 "esutils-1.1.6" = {
1170 1638 name = "esutils";
1171 1639 packageName = "esutils";
1172 1640 version = "1.1.6";
1173 1641 src = fetchurl {
1174 1642 url = "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz";
1175 1643 sha1 = "c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375";
1176 1644 };
1177 1645 };
1178 1646 "isarray-0.0.1" = {
1179 1647 name = "isarray";
1180 1648 packageName = "isarray";
1181 1649 version = "0.0.1";
1182 1650 src = fetchurl {
1183 1651 url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
1184 1652 sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
1185 1653 };
1186 1654 };
1187 "estraverse-1.9.3" = {
1655 "estraverse-4.2.0" = {
1188 1656 name = "estraverse";
1189 1657 packageName = "estraverse";
1190 version = "1.9.3";
1658 version = "4.2.0";
1191 1659 src = fetchurl {
1192 url = "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz";
1193 sha1 = "af67f2dc922582415950926091a4005d29c9bb44";
1660 url = "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz";
1661 sha1 = "0dee3fed31fcd469618ce7342099fc1afa0bdb13";
1194 1662 };
1195 1663 };
1196 1664 "esutils-2.0.2" = {
1197 1665 name = "esutils";
1198 1666 packageName = "esutils";
1199 1667 version = "2.0.2";
1200 1668 src = fetchurl {
1201 1669 url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";
1202 1670 sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
1203 1671 };
1204 1672 };
1205 "esprima-2.7.3" = {
1673 "esprima-3.1.3" = {
1206 1674 name = "esprima";
1207 1675 packageName = "esprima";
1208 version = "2.7.3";
1676 version = "3.1.3";
1209 1677 src = fetchurl {
1210 url = "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz";
1211 sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581";
1678 url = "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz";
1679 sha1 = "fdca51cee6133895e3c88d535ce49dbff62a4633";
1212 1680 };
1213 1681 };
1214 1682 "optionator-0.8.2" = {
1215 1683 name = "optionator";
1216 1684 packageName = "optionator";
1217 1685 version = "0.8.2";
1218 1686 src = fetchurl {
1219 1687 url = "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz";
1220 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 1691 "prelude-ls-1.1.2" = {
1233 1692 name = "prelude-ls";
1234 1693 packageName = "prelude-ls";
1235 1694 version = "1.1.2";
1236 1695 src = fetchurl {
1237 1696 url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
1238 1697 sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
1239 1698 };
1240 1699 };
1241 1700 "deep-is-0.1.3" = {
1242 1701 name = "deep-is";
1243 1702 packageName = "deep-is";
1244 1703 version = "0.1.3";
1245 1704 src = fetchurl {
1246 1705 url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
1247 1706 sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
1248 1707 };
1249 1708 };
1250 1709 "wordwrap-1.0.0" = {
1251 1710 name = "wordwrap";
1252 1711 packageName = "wordwrap";
1253 1712 version = "1.0.0";
1254 1713 src = fetchurl {
1255 1714 url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
1256 1715 sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
1257 1716 };
1258 1717 };
1259 1718 "type-check-0.3.2" = {
1260 1719 name = "type-check";
1261 1720 packageName = "type-check";
1262 1721 version = "0.3.2";
1263 1722 src = fetchurl {
1264 1723 url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
1265 1724 sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
1266 1725 };
1267 1726 };
1268 1727 "levn-0.3.0" = {
1269 1728 name = "levn";
1270 1729 packageName = "levn";
1271 1730 version = "0.3.0";
1272 1731 src = fetchurl {
1273 1732 url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
1274 1733 sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
1275 1734 };
1276 1735 };
1277 "fast-levenshtein-2.0.4" = {
1736 "fast-levenshtein-2.0.6" = {
1278 1737 name = "fast-levenshtein";
1279 1738 packageName = "fast-levenshtein";
1280 version = "2.0.4";
1739 version = "2.0.6";
1281 1740 src = fetchurl {
1282 url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.4.tgz";
1283 sha1 = "e31e729eea62233c60a7bc9dce2bdcc88b4fffe3";
1741 url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
1742 sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
1284 1743 };
1285 1744 };
1286 "acorn-4.0.3" = {
1745 "acorn-5.1.2" = {
1287 1746 name = "acorn";
1288 1747 packageName = "acorn";
1289 version = "4.0.3";
1748 version = "5.1.2";
1290 1749 src = fetchurl {
1291 url = "https://registry.npmjs.org/acorn/-/acorn-4.0.3.tgz";
1292 sha1 = "1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1";
1750 url = "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz";
1751 sha1 = "911cb53e036807cf0fa778dc5d370fbd864246d7";
1293 1752 };
1294 1753 };
1295 1754 "acorn-jsx-3.0.1" = {
1296 1755 name = "acorn-jsx";
1297 1756 packageName = "acorn-jsx";
1298 1757 version = "3.0.1";
1299 1758 src = fetchurl {
1300 1759 url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
1301 1760 sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
1302 1761 };
1303 1762 };
1304 "acorn-3.3.0" = {
1305 name = "acorn";
1306 packageName = "acorn";
1307 version = "3.3.0";
1763 "object-assign-4.1.1" = {
1764 name = "object-assign";
1765 packageName = "object-assign";
1766 version = "4.1.1";
1308 1767 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";
1768 url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
1769 sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
1320 1770 };
1321 1771 };
1322 "configstore-2.1.0" = {
1323 name = "configstore";
1324 packageName = "configstore";
1325 version = "2.1.0";
1772 "crisper-1.2.0" = {
1773 name = "crisper";
1774 packageName = "crisper";
1775 version = "1.2.0";
1326 1776 src = fetchurl {
1327 url = "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz";
1328 sha1 = "737a3a7036e9886102aa6099e47bb33ab1aba1a1";
1777 url = "https://registry.npmjs.org/crisper/-/crisper-1.2.0.tgz";
1778 sha1 = "9a91f597d71f6110294e076ad44dbb3408568e46";
1329 1779 };
1330 1780 };
1331 "is-npm-1.0.0" = {
1332 name = "is-npm";
1333 packageName = "is-npm";
1334 version = "1.0.0";
1781 "optparse-1.0.5" = {
1782 name = "optparse";
1783 packageName = "optparse";
1784 version = "1.0.5";
1335 1785 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";
1786 url = "https://registry.npmjs.org/optparse/-/optparse-1.0.5.tgz";
1787 sha1 = "75e75a96506611eb1c65ba89018ff08a981e2c16";
1347 1788 };
1348 1789 };
1349 "semver-diff-2.1.0" = {
1350 name = "semver-diff";
1351 packageName = "semver-diff";
1352 version = "2.1.0";
1790 "semver-5.4.1" = {
1791 name = "semver";
1792 packageName = "semver";
1793 version = "5.4.1";
1353 1794 src = fetchurl {
1354 url = "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz";
1355 sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36";
1795 url = "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz";
1796 sha1 = "e059c09d8571f0540823733433505d3a2f00b18e";
1356 1797 };
1357 1798 };
1358 "filled-array-1.1.0" = {
1359 name = "filled-array";
1360 packageName = "filled-array";
1361 version = "1.1.0";
1799 "npm-registry-client-8.4.0" = {
1800 name = "npm-registry-client";
1801 packageName = "npm-registry-client";
1802 version = "8.4.0";
1362 1803 src = fetchurl {
1363 url = "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz";
1364 sha1 = "c3c4f6c663b923459a9aa29912d2d031f1507f84";
1804 url = "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.4.0.tgz";
1805 sha1 = "d52b901685647fc62a4c03eafecb6ceaa5018d4c";
1365 1806 };
1366 1807 };
1367 "object-assign-4.1.0" = {
1368 name = "object-assign";
1369 packageName = "object-assign";
1370 version = "4.1.0";
1808 "npmconf-2.1.2" = {
1809 name = "npmconf";
1810 packageName = "npmconf";
1811 version = "2.1.2";
1371 1812 src = fetchurl {
1372 url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz";
1373 sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0";
1813 url = "https://registry.npmjs.org/npmconf/-/npmconf-2.1.2.tgz";
1814 sha1 = "66606a4a736f1e77a059aa071a79c94ab781853a";
1374 1815 };
1375 1816 };
1376 "repeating-2.0.1" = {
1377 name = "repeating";
1378 packageName = "repeating";
1379 version = "2.0.1";
1817 "tar-3.1.15" = {
1818 name = "tar";
1819 packageName = "tar";
1820 version = "3.1.15";
1380 1821 src = fetchurl {
1381 url = "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz";
1382 sha1 = "5214c53a926d3552707527fbab415dbc08d06dda";
1822 url = "https://registry.npmjs.org/tar/-/tar-3.1.15.tgz";
1823 sha1 = "cccdc35b90917d58e4c3837795d5d022d7a1f46f";
1383 1824 };
1384 1825 };
1385 "string-width-1.0.2" = {
1386 name = "string-width";
1387 packageName = "string-width";
1388 version = "1.0.2";
1826 "temp-0.8.3" = {
1827 name = "temp";
1828 packageName = "temp";
1829 version = "0.8.3";
1389 1830 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";
1831 url = "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz";
1832 sha1 = "e0c6bc4d26b903124410e4fed81103014dfc1f59";
1401 1833 };
1402 1834 };
1403 "is-finite-1.0.1" = {
1404 name = "is-finite";
1405 packageName = "is-finite";
1406 version = "1.0.1";
1835 "fs.extra-1.3.2" = {
1836 name = "fs.extra";
1837 packageName = "fs.extra";
1838 version = "1.3.2";
1407 1839 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 {
1417 url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";
1418 sha1 = "c020f529c5282adfdd233d91d4b181c3d686dc4b";
1840 url = "https://registry.npmjs.org/fs.extra/-/fs.extra-1.3.2.tgz";
1841 sha1 = "dd023f93013bee24531f1b33514c37b20fd93349";
1419 1842 };
1420 1843 };
1421 "code-point-at-1.0.0" = {
1422 name = "code-point-at";
1423 packageName = "code-point-at";
1424 version = "1.0.0";
1844 "findit-2.0.0" = {
1845 name = "findit";
1846 packageName = "findit";
1847 version = "2.0.0";
1425 1848 src = fetchurl {
1426 url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.0.0.tgz";
1427 sha1 = "f69b192d3f7d91e382e4b71bddb77878619ab0c6";
1849 url = "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz";
1850 sha1 = "6509f0126af4c178551cfa99394e032e13a4d56e";
1428 1851 };
1429 1852 };
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";
1853 "base64-js-1.2.1" = {
1854 name = "base64-js";
1855 packageName = "base64-js";
1856 version = "1.2.1";
1434 1857 src = fetchurl {
1435 url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
1436 sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
1858 url = "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz";
1859 sha1 = "a91947da1f4a516ea38e5b4ec0ec3773675e0886";
1437 1860 };
1438 1861 };
1439 "dot-prop-3.0.0" = {
1440 name = "dot-prop";
1441 packageName = "dot-prop";
1442 version = "3.0.0";
1862 "slasp-0.0.4" = {
1863 name = "slasp";
1864 packageName = "slasp";
1865 version = "0.0.4";
1443 1866 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";
1867 url = "https://registry.npmjs.org/slasp/-/slasp-0.0.4.tgz";
1868 sha1 = "9adc26ee729a0f95095851a5489f87a5258d57a9";
1455 1869 };
1456 1870 };
1457 "osenv-0.1.3" = {
1458 name = "osenv";
1459 packageName = "osenv";
1460 version = "0.1.3";
1871 "nijs-0.0.23" = {
1872 name = "nijs";
1873 packageName = "nijs";
1874 version = "0.0.23";
1461 1875 src = fetchurl {
1462 url = "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz";
1463 sha1 = "83cf05c6d6458fc4d5ac6362ea325d92f2754217";
1876 url = "https://registry.npmjs.org/nijs/-/nijs-0.0.23.tgz";
1877 sha1 = "dbf8f4a0acafbe3b8d9b71c24cbd1d851de6c31a";
1464 1878 };
1465 1879 };
1466 "uuid-2.0.3" = {
1467 name = "uuid";
1468 packageName = "uuid";
1469 version = "2.0.3";
1880 "concat-stream-1.6.0" = {
1881 name = "concat-stream";
1882 packageName = "concat-stream";
1883 version = "1.6.0";
1470 1884 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";
1479 src = fetchurl {
1480 url = "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.2.0.tgz";
1481 sha1 = "14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab";
1885 url = "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz";
1886 sha1 = "0aac662fd52be78964d5532f694784e70110acf7";
1482 1887 };
1483 1888 };
1484 "xdg-basedir-2.0.0" = {
1485 name = "xdg-basedir";
1486 packageName = "xdg-basedir";
1487 version = "2.0.0";
1889 "normalize-package-data-2.4.0" = {
1890 name = "normalize-package-data";
1891 packageName = "normalize-package-data";
1892 version = "2.4.0";
1488 1893 src = fetchurl {
1489 url = "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz";
1490 sha1 = "edbc903cc385fc04523d966a335504b5504d1bd2";
1894 url = "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz";
1895 sha1 = "12f95a307d58352075a04907b84ac8be98ac012f";
1491 1896 };
1492 1897 };
1493 "is-obj-1.0.1" = {
1494 name = "is-obj";
1495 packageName = "is-obj";
1496 version = "1.0.1";
1898 "npm-package-arg-5.1.2" = {
1899 name = "npm-package-arg";
1900 packageName = "npm-package-arg";
1901 version = "5.1.2";
1497 1902 src = fetchurl {
1498 url = "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz";
1499 sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f";
1903 url = "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-5.1.2.tgz";
1904 sha1 = "fb18d17bb61e60900d6312619919bd753755ab37";
1500 1905 };
1501 1906 };
1502 "os-homedir-1.0.1" = {
1503 name = "os-homedir";
1504 packageName = "os-homedir";
1505 version = "1.0.1";
1907 "once-1.4.0" = {
1908 name = "once";
1909 packageName = "once";
1910 version = "1.4.0";
1506 1911 src = fetchurl {
1507 url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz";
1508 sha1 = "0d62bdf44b916fd3bbdcf2cab191948fb094f007";
1912 url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
1913 sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
1509 1914 };
1510 1915 };
1511 "imurmurhash-0.1.4" = {
1512 name = "imurmurhash";
1513 packageName = "imurmurhash";
1514 version = "0.1.4";
1916 "retry-0.10.1" = {
1917 name = "retry";
1918 packageName = "retry";
1919 version = "0.10.1";
1515 1920 src = fetchurl {
1516 url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
1517 sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
1921 url = "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz";
1922 sha1 = "e76388d217992c252750241d3d3956fed98d8ff4";
1518 1923 };
1519 1924 };
1520 1925 "slide-1.1.6" = {
1521 1926 name = "slide";
1522 1927 packageName = "slide";
1523 1928 version = "1.1.6";
1524 1929 src = fetchurl {
1525 1930 url = "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz";
1526 1931 sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707";
1527 1932 };
1528 1933 };
1529 "package-json-2.4.0" = {
1530 name = "package-json";
1531 packageName = "package-json";
1532 version = "2.4.0";
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 {
1561 url = "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz";
1562 sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942";
1563 };
1564 };
1565 "semver-5.3.0" = {
1566 name = "semver";
1567 packageName = "semver";
1568 version = "5.3.0";
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";
1934 "ssri-4.1.6" = {
1935 name = "ssri";
1936 packageName = "ssri";
1937 version = "4.1.6";
1578 1938 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 {
1597 url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
1598 sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
1599 };
1600 };
1601 "is-redirect-1.0.0" = {
1602 name = "is-redirect";
1603 packageName = "is-redirect";
1604 version = "1.0.0";
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 {
1633 url = "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz";
1634 sha1 = "4e3366b39e7f5457e35f1324bdf6f88d0bfc7306";
1939 url = "https://registry.npmjs.org/ssri/-/ssri-4.1.6.tgz";
1940 sha1 = "0cb49b6ac84457e7bdd466cb730c3cb623e9a25b";
1635 1941 };
1636 1942 };
1637 "node-status-codes-1.0.0" = {
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";
1943 "npmlog-4.1.2" = {
1944 name = "npmlog";
1945 packageName = "npmlog";
1946 version = "4.1.2";
1659 1947 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";
1675 packageName = "readable-stream";
1676 version = "2.1.5";
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";
1948 url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";
1949 sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b";
1689 1950 };
1690 1951 };
1691 "unzip-response-1.0.1" = {
1692 name = "unzip-response";
1693 packageName = "unzip-response";
1694 version = "1.0.1";
1952 "typedarray-0.0.6" = {
1953 name = "typedarray";
1954 packageName = "typedarray";
1955 version = "0.0.6";
1695 1956 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 {
1714 url = "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz";
1715 sha1 = "4a6fa07399c26bba47f0b2496b4d0fb408c5550d";
1957 url = "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";
1958 sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
1716 1959 };
1717 1960 };
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";
1961 "readable-stream-2.3.3" = {
1962 name = "readable-stream";
1963 packageName = "readable-stream";
1964 version = "2.3.3";
1731 1965 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";
1966 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz";
1967 sha1 = "368f2512d79f9d46fdfc71349ae7878bbc1eb95c";
1761 1968 };
1762 1969 };
1763 1970 "isarray-1.0.0" = {
1764 1971 name = "isarray";
1765 1972 packageName = "isarray";
1766 1973 version = "1.0.0";
1767 1974 src = fetchurl {
1768 1975 url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
1769 1976 sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
1770 1977 };
1771 1978 };
1772 1979 "process-nextick-args-1.0.7" = {
1773 1980 name = "process-nextick-args";
1774 1981 packageName = "process-nextick-args";
1775 1982 version = "1.0.7";
1776 1983 src = fetchurl {
1777 1984 url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
1778 1985 sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
1779 1986 };
1780 1987 };
1781 "string_decoder-0.10.31" = {
1988 "string_decoder-1.0.3" = {
1782 1989 name = "string_decoder";
1783 1990 packageName = "string_decoder";
1784 version = "0.10.31";
1991 version = "1.0.3";
1785 1992 src = fetchurl {
1786 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
1787 sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
1993 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz";
1994 sha1 = "0fc67d7c141825de94282dd536bec6b9bce860ab";
1788 1995 };
1789 1996 };
1790 1997 "util-deprecate-1.0.2" = {
1791 1998 name = "util-deprecate";
1792 1999 packageName = "util-deprecate";
1793 2000 version = "1.0.2";
1794 2001 src = fetchurl {
1795 2002 url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
1796 2003 sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
1797 2004 };
1798 2005 };
1799 "prepend-http-1.0.4" = {
1800 name = "prepend-http";
1801 packageName = "prepend-http";
2006 "hosted-git-info-2.5.0" = {
2007 name = "hosted-git-info";
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 2054 version = "1.0.4";
1803 2055 src = fetchurl {
1804 url = "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz";
1805 sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
2056 url = "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz";
2057 sha1 = "9bdf2f20e1f40ed447fbe273266191fced51626c";
2058 };
2059 };
2060 "spdx-license-ids-1.2.2" = {
2061 name = "spdx-license-ids";
2062 packageName = "spdx-license-ids";
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";
2145 src = fetchurl {
2146 url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";
2147 sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
1806 2148 };
1807 2149 };
1808 "rc-1.1.6" = {
1809 name = "rc";
1810 packageName = "rc";
1811 version = "1.1.6";
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";
1812 2190 src = fetchurl {
1813 url = "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz";
1814 sha1 = "43651b76b6ae53b5c802f1151fa3fc3b059969c9";
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 2249 "ini-1.3.4" = {
1818 2250 name = "ini";
1819 2251 packageName = "ini";
1820 2252 version = "1.3.4";
1821 2253 src = fetchurl {
1822 2254 url = "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz";
1823 2255 sha1 = "0537cb79daf59b59a1a517dff706c86ec039162e";
1824 2256 };
1825 2257 };
1826 "minimist-1.2.0" = {
1827 name = "minimist";
1828 packageName = "minimist";
1829 version = "1.2.0";
2258 "once-1.3.3" = {
2259 name = "once";
2260 packageName = "once";
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 2280 src = fetchurl {
1831 url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
1832 sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
2281 url = "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz";
2282 sha1 = "5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e";
2283 };
2284 };
2285 "proto-list-1.2.4" = {
2286 name = "proto-list";
2287 packageName = "proto-list";
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";
1833 2310 };
1834 2311 };
1835 "strip-json-comments-1.0.4" = {
1836 name = "strip-json-comments";
1837 packageName = "strip-json-comments";
1838 version = "1.0.4";
2312 "yallist-3.0.2" = {
2313 name = "yallist";
2314 packageName = "yallist";
2315 version = "3.0.2";
1839 2316 src = fetchurl {
1840 url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
1841 sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
2317 url = "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz";
2318 sha1 = "8452b4bb7e83c7c188d8041c1a837c773d6d8bb9";
2319 };
2320 };
2321 "fs-extra-0.6.4" = {
2322 name = "fs-extra";
2323 packageName = "fs-extra";
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";
1842 2337 };
1843 2338 };
1844 "crisper-1.2.0" = {
1845 name = "crisper";
1846 packageName = "crisper";
1847 version = "1.2.0";
2339 "walk-2.3.9" = {
2340 name = "walk";
2341 packageName = "walk";
2342 version = "2.3.9";
1848 2343 src = fetchurl {
1849 url = "https://registry.npmjs.org/crisper/-/crisper-1.2.0.tgz";
1850 sha1 = "9a91f597d71f6110294e076ad44dbb3408568e46";
2344 url = "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz";
2345 sha1 = "31b4db6678f2ae01c39ea9fb8725a9031e558a7b";
2346 };
2347 };
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";
1851 2355 };
1852 2356 };
1853 "cli-1.0.0" = {
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 2376 name = "cli";
1855 2377 packageName = "cli";
1856 version = "1.0.0";
2378 version = "1.0.1";
1857 2379 src = fetchurl {
1858 url = "https://registry.npmjs.org/cli/-/cli-1.0.0.tgz";
1859 sha1 = "ee07dfc1390e3f2e6a9957cf88e1d4bfa777719d";
2380 url = "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz";
2381 sha1 = "22817534f24bfa4950c34d532d48ecbc621b8c14";
1860 2382 };
1861 2383 };
1862 2384 "console-browserify-1.1.0" = {
1863 2385 name = "console-browserify";
1864 2386 packageName = "console-browserify";
1865 2387 version = "1.1.0";
1866 2388 src = fetchurl {
1867 2389 url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
1868 2390 sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
1869 2391 };
1870 2392 };
1871 2393 "htmlparser2-3.8.3" = {
1872 2394 name = "htmlparser2";
1873 2395 packageName = "htmlparser2";
1874 2396 version = "3.8.3";
1875 2397 src = fetchurl {
1876 2398 url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
1877 2399 sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
1878 2400 };
1879 2401 };
1880 "minimatch-3.0.3" = {
2402 "minimatch-3.0.4" = {
1881 2403 name = "minimatch";
1882 2404 packageName = "minimatch";
1883 version = "3.0.3";
2405 version = "3.0.4";
1884 2406 src = fetchurl {
1885 url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz";
1886 sha1 = "2a4e4090b96b2db06a9d7df01055a62a77c9b774";
2407 url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
2408 sha1 = "5166e286457f03306064be5497e8dbb0c3d32083";
1887 2409 };
1888 2410 };
1889 2411 "shelljs-0.3.0" = {
1890 2412 name = "shelljs";
1891 2413 packageName = "shelljs";
1892 2414 version = "0.3.0";
1893 2415 src = fetchurl {
1894 2416 url = "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
1895 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 2429 "lodash-3.7.0" = {
1899 2430 name = "lodash";
1900 2431 packageName = "lodash";
1901 2432 version = "3.7.0";
1902 2433 src = fetchurl {
1903 2434 url = "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz";
1904 2435 sha1 = "3678bd8ab995057c07ade836ed2ef087da811d45";
1905 2436 };
1906 2437 };
1907 "glob-7.1.0" = {
2438 "glob-7.1.2" = {
1908 2439 name = "glob";
1909 2440 packageName = "glob";
1910 version = "7.1.0";
2441 version = "7.1.2";
1911 2442 src = fetchurl {
1912 url = "https://registry.npmjs.org/glob/-/glob-7.1.0.tgz";
1913 sha1 = "36add856d746d0d99e4cc2797bba1ae2c67272fd";
2443 url = "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz";
2444 sha1 = "c19c9df9a028702d678612384a6552404c636d15";
1914 2445 };
1915 2446 };
1916 2447 "fs.realpath-1.0.0" = {
1917 2448 name = "fs.realpath";
1918 2449 packageName = "fs.realpath";
1919 2450 version = "1.0.0";
1920 2451 src = fetchurl {
1921 2452 url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
1922 2453 sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
1923 2454 };
1924 2455 };
1925 "inflight-1.0.5" = {
2456 "inflight-1.0.6" = {
1926 2457 name = "inflight";
1927 2458 packageName = "inflight";
1928 version = "1.0.5";
2459 version = "1.0.6";
1929 2460 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 {
1939 url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
1940 sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
2461 url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
2462 sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
1941 2463 };
1942 2464 };
1943 "wrappy-1.0.2" = {
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" = {
2465 "brace-expansion-1.1.8" = {
1953 2466 name = "brace-expansion";
1954 2467 packageName = "brace-expansion";
1955 version = "1.1.6";
2468 version = "1.1.8";
1956 2469 src = fetchurl {
1957 url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz";
1958 sha1 = "7197d7eaa9b87e648390ea61fc66c84427420df9";
2470 url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz";
2471 sha1 = "c07b211c7c952ec1f8efd51a77ef0d1d3990a292";
1959 2472 };
1960 2473 };
1961 "balanced-match-0.4.2" = {
2474 "balanced-match-1.0.0" = {
1962 2475 name = "balanced-match";
1963 2476 packageName = "balanced-match";
1964 version = "0.4.2";
2477 version = "1.0.0";
1965 2478 src = fetchurl {
1966 url = "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz";
1967 sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838";
2479 url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
2480 sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
1968 2481 };
1969 2482 };
1970 2483 "concat-map-0.0.1" = {
1971 2484 name = "concat-map";
1972 2485 packageName = "concat-map";
1973 2486 version = "0.0.1";
1974 2487 src = fetchurl {
1975 2488 url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
1976 2489 sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
1977 2490 };
1978 2491 };
1979 2492 "date-now-0.1.4" = {
1980 2493 name = "date-now";
1981 2494 packageName = "date-now";
1982 2495 version = "0.1.4";
1983 2496 src = fetchurl {
1984 2497 url = "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
1985 2498 sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
1986 2499 };
1987 2500 };
1988 2501 "domhandler-2.3.0" = {
1989 2502 name = "domhandler";
1990 2503 packageName = "domhandler";
1991 2504 version = "2.3.0";
1992 2505 src = fetchurl {
1993 2506 url = "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
1994 2507 sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
1995 2508 };
1996 2509 };
1997 2510 "domutils-1.5.1" = {
1998 2511 name = "domutils";
1999 2512 packageName = "domutils";
2000 2513 version = "1.5.1";
2001 2514 src = fetchurl {
2002 2515 url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
2003 2516 sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
2004 2517 };
2005 2518 };
2006 2519 "domelementtype-1.3.0" = {
2007 2520 name = "domelementtype";
2008 2521 packageName = "domelementtype";
2009 2522 version = "1.3.0";
2010 2523 src = fetchurl {
2011 2524 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz";
2012 2525 sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
2013 2526 };
2014 2527 };
2015 2528 "readable-stream-1.1.14" = {
2016 2529 name = "readable-stream";
2017 2530 packageName = "readable-stream";
2018 2531 version = "1.1.14";
2019 2532 src = fetchurl {
2020 2533 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
2021 2534 sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
2022 2535 };
2023 2536 };
2024 2537 "entities-1.0.0" = {
2025 2538 name = "entities";
2026 2539 packageName = "entities";
2027 2540 version = "1.0.0";
2028 2541 src = fetchurl {
2029 2542 url = "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
2030 2543 sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
2031 2544 };
2032 2545 };
2033 2546 "dom-serializer-0.1.0" = {
2034 2547 name = "dom-serializer";
2035 2548 packageName = "dom-serializer";
2036 2549 version = "0.1.0";
2037 2550 src = fetchurl {
2038 2551 url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz";
2039 2552 sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
2040 2553 };
2041 2554 };
2042 2555 "domelementtype-1.1.3" = {
2043 2556 name = "domelementtype";
2044 2557 packageName = "domelementtype";
2045 2558 version = "1.1.3";
2046 2559 src = fetchurl {
2047 2560 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz";
2048 2561 sha1 = "bd28773e2642881aec51544924299c5cd822185b";
2049 2562 };
2050 2563 };
2051 2564 "entities-1.1.1" = {
2052 2565 name = "entities";
2053 2566 packageName = "entities";
2054 2567 version = "1.1.1";
2055 2568 src = fetchurl {
2056 2569 url = "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz";
2057 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 2619 args = {
2062 2620 name = "rhodecode-enterprise";
2063 2621 packageName = "rhodecode-enterprise";
2064 2622 version = "0.0.1";
2065 2623 src = ./.;
2066 2624 dependencies = [
2067 2625 sources."grunt-0.4.5"
2068 2626 sources."grunt-contrib-copy-1.0.0"
2069 2627 (sources."grunt-contrib-concat-0.5.1" // {
2070 2628 dependencies = [
2071 2629 sources."chalk-0.5.1"
2072 2630 sources."ansi-styles-1.1.0"
2073 2631 sources."has-ansi-0.1.0"
2074 2632 sources."strip-ansi-0.3.0"
2075 2633 sources."supports-color-0.2.0"
2076 2634 sources."ansi-regex-0.2.1"
2077 2635 ];
2078 2636 })
2079 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 2639 dependencies = [
2082 sources."async-2.0.1"
2083 sources."lodash-4.16.2"
2640 sources."async-2.5.0"
2641 sources."lodash-4.17.4"
2084 2642 ];
2085 2643 })
2086 2644 (sources."grunt-contrib-watch-0.6.1" // {
2087 2645 dependencies = [
2088 2646 sources."lodash-2.4.2"
2089 2647 sources."async-0.2.10"
2090 2648 ];
2091 2649 })
2092 sources."crisper-2.0.2"
2093 (sources."vulcanize-1.14.8" // {
2650 sources."crisper-2.1.1"
2651 (sources."vulcanize-1.16.0" // {
2094 2652 dependencies = [
2095 2653 sources."nopt-3.0.6"
2096 2654 ];
2097 2655 })
2098 2656 sources."grunt-crisper-1.0.1"
2099 2657 (sources."grunt-vulcanize-1.0.0" // {
2100 2658 dependencies = [
2101 2659 sources."crisper-1.2.0"
2102 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 2665 dependencies = [
2107 sources."minimatch-3.0.3"
2666 sources."minimatch-3.0.4"
2108 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 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 2677 sources."async-0.1.22"
2115 2678 sources."coffee-script-1.3.3"
2116 2679 sources."colors-0.6.2"
2117 2680 sources."dateformat-1.0.2-1.2.3"
2118 2681 sources."eventemitter2-0.4.14"
2119 2682 (sources."findup-sync-0.1.3" // {
2120 2683 dependencies = [
2121 2684 sources."glob-3.2.11"
2122 2685 sources."lodash-2.4.2"
2123 2686 sources."minimatch-0.3.0"
2124 2687 ];
2125 2688 })
2126 2689 (sources."glob-3.1.21" // {
2127 2690 dependencies = [
2128 2691 sources."inherits-1.0.2"
2129 2692 ];
2130 2693 })
2131 2694 sources."hooker-0.2.3"
2132 2695 sources."iconv-lite-0.2.11"
2133 2696 sources."minimatch-0.2.14"
2134 2697 sources."nopt-1.0.10"
2135 2698 sources."rimraf-2.2.8"
2136 2699 sources."lodash-0.9.2"
2137 2700 sources."underscore.string-2.2.1"
2138 2701 sources."which-1.0.9"
2139 2702 sources."js-yaml-2.0.5"
2140 2703 sources."exit-0.1.2"
2141 2704 sources."getobject-0.1.0"
2142 2705 sources."grunt-legacy-util-0.2.0"
2143 2706 (sources."grunt-legacy-log-0.1.3" // {
2144 2707 dependencies = [
2145 2708 sources."lodash-2.4.2"
2146 2709 sources."underscore.string-2.3.3"
2147 2710 ];
2148 2711 })
2149 2712 sources."inherits-2.0.3"
2150 2713 sources."lru-cache-2.7.3"
2151 2714 sources."sigmund-1.0.1"
2152 2715 sources."graceful-fs-1.2.3"
2153 sources."abbrev-1.0.9"
2716 sources."abbrev-1.1.0"
2154 2717 (sources."argparse-0.1.16" // {
2155 2718 dependencies = [
2156 2719 sources."underscore.string-2.4.0"
2157 2720 ];
2158 2721 })
2159 2722 sources."esprima-1.0.4"
2160 2723 sources."underscore-1.7.0"
2161 2724 (sources."grunt-legacy-log-utils-0.1.1" // {
2162 2725 dependencies = [
2163 2726 sources."lodash-2.4.2"
2164 2727 sources."underscore.string-2.3.3"
2165 2728 ];
2166 2729 })
2167 2730 sources."chalk-1.1.3"
2168 2731 sources."file-sync-cmp-0.1.1"
2169 2732 sources."ansi-styles-2.2.1"
2170 2733 sources."escape-string-regexp-1.0.5"
2171 2734 sources."has-ansi-2.0.0"
2172 2735 sources."strip-ansi-3.0.1"
2173 2736 sources."supports-color-2.0.0"
2174 sources."ansi-regex-2.0.0"
2737 sources."ansi-regex-2.1.1"
2175 2738 sources."source-map-0.3.0"
2176 sources."amdefine-1.0.0"
2177 (sources."less-2.7.1" // {
2739 sources."amdefine-1.0.1"
2740 (sources."less-2.7.2" // {
2178 2741 dependencies = [
2179 sources."graceful-fs-4.1.8"
2180 sources."source-map-0.5.6"
2742 sources."graceful-fs-4.1.11"
2743 sources."source-map-0.5.7"
2181 2744 ];
2182 2745 })
2183 2746 sources."errno-0.1.4"
2184 sources."image-size-0.5.0"
2185 sources."mime-1.3.4"
2747 sources."image-size-0.5.5"
2748 sources."mime-1.4.0"
2186 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 2752 sources."prr-0.0.0"
2189 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 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 2816 (sources."globule-0.1.0" // {
2194 2817 dependencies = [
2195 2818 sources."lodash-1.0.2"
2196 2819 ];
2197 2820 })
2198 sources."qs-0.5.6"
2199 2821 sources."faye-websocket-0.4.4"
2200 2822 (sources."noptify-0.0.3" // {
2201 2823 dependencies = [
2202 2824 sources."nopt-2.0.0"
2203 2825 ];
2204 2826 })
2205 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 2830 sources."dom5-1.3.6"
2208 sources."array-back-1.0.3"
2209 sources."command-line-usage-2.0.5"
2210 sources."core-js-2.4.1"
2831 sources."array-back-1.0.4"
2211 2832 sources."feature-detect-es6-1.3.1"
2212 (sources."find-replace-1.0.2" // {
2213 dependencies = [
2214 sources."test-value-2.1.0"
2215 ];
2216 })
2217 sources."typical-2.6.0"
2218 sources."ansi-escape-sequences-2.2.2"
2219 sources."column-layout-2.1.4"
2220 sources."wordwrapjs-1.2.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"
2833 sources."find-replace-1.0.3"
2834 sources."typical-2.6.1"
2835 sources."test-value-2.1.0"
2836 sources."ansi-escape-sequences-3.0.0"
2837 sources."table-layout-0.3.0"
2838 sources."core-js-2.5.1"
2839 sources."deep-extend-0.4.2"
2840 sources."wordwrapjs-2.0.0"
2841 sources."reduce-flatten-1.0.1"
2234 2842 sources."@types/clone-0.1.30"
2235 sources."@types/node-4.0.30"
2843 sources."@types/node-4.2.20"
2236 2844 (sources."@types/parse5-0.0.31" // {
2237 2845 dependencies = [
2238 sources."@types/node-6.0.41"
2846 sources."@types/node-6.0.88"
2239 2847 ];
2240 2848 })
2241 2849 sources."clone-1.0.2"
2242 2850 sources."parse5-1.5.1"
2243 2851 sources."es6-promise-2.3.0"
2244 sources."hydrolysis-1.24.1"
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" // {
2852 (sources."hydrolysis-1.25.0" // {
2250 2853 dependencies = [
2251 sources."estraverse-1.9.3"
2252 sources."esutils-2.0.2"
2253 sources."esprima-2.7.3"
2254 sources."source-map-0.2.0"
2854 sources."dom5-1.1.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 2874 sources."estraverse-3.1.0"
2259 sources."path-is-absolute-1.0.0"
2260 sources."babel-runtime-6.11.6"
2261 sources."regenerator-runtime-0.9.5"
2875 sources."path-is-absolute-1.0.1"
2876 (sources."babel-runtime-6.26.0" // {
2877 dependencies = [
2878 sources."regenerator-runtime-0.11.0"
2879 ];
2880 })
2881 sources."regenerator-runtime-0.10.5"
2262 2882 sources."esutils-1.1.6"
2263 2883 sources."isarray-0.0.1"
2264 2884 sources."optionator-0.8.2"
2265 2885 sources."prelude-ls-1.1.2"
2266 2886 sources."deep-is-0.1.3"
2267 2887 sources."wordwrap-1.0.0"
2268 2888 sources."type-check-0.3.2"
2269 2889 sources."levn-0.3.0"
2270 sources."fast-levenshtein-2.0.4"
2271 sources."acorn-4.0.3"
2272 (sources."acorn-jsx-3.0.1" // {
2890 sources."fast-levenshtein-2.0.6"
2891 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 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"
2278 (sources."configstore-2.1.0" // {
2900 (sources."npmconf-2.1.2" // {
2279 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"
2284 sources."latest-version-2.0.0"
2285 sources."semver-diff-2.1.0"
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" // {
2907 sources."tar-3.1.15"
2908 sources."temp-0.8.3"
2909 (sources."fs.extra-1.3.2" // {
2300 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"
2305 sources."is-obj-1.0.1"
2306 sources."os-homedir-1.0.1"
2307 sources."imurmurhash-0.1.4"
2914 sources."findit-2.0.0"
2915 sources."base64-js-1.2.1"
2916 sources."slasp-0.0.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 2923 sources."slide-1.1.6"
2309 sources."package-json-2.4.0"
2310 sources."got-5.6.0"
2311 sources."registry-auth-token-3.0.1"
2312 sources."registry-url-3.1.0"
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" // {
2924 sources."ssri-4.1.6"
2925 sources."npmlog-4.1.2"
2926 sources."typedarray-0.0.6"
2927 (sources."readable-stream-2.3.3" // {
2326 2928 dependencies = [
2327 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 2932 sources."process-nextick-args-1.0.7"
2340 sources."string_decoder-0.10.31"
2933 sources."string_decoder-1.0.3"
2341 2934 sources."util-deprecate-1.0.2"
2342 sources."prepend-http-1.0.4"
2343 (sources."rc-1.1.6" // {
2935 sources."hosted-git-info-2.5.0"
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 2969 dependencies = [
2345 sources."minimist-1.2.0"
2970 sources."mkdirp-0.3.5"
2346 2971 ];
2347 2972 })
2348 sources."ini-1.3.4"
2349 sources."strip-json-comments-1.0.4"
2350 (sources."cli-1.0.0" // {
2973 sources."walk-2.3.9"
2974 sources."ncp-0.4.2"
2975 sources."jsonfile-1.0.1"
2976 sources."foreachasync-3.0.0"
2977 (sources."cli-1.0.1" // {
2351 2978 dependencies = [
2352 sources."glob-7.1.0"
2353 sources."minimatch-3.0.3"
2979 sources."glob-7.1.2"
2980 sources."minimatch-3.0.4"
2354 2981 ];
2355 2982 })
2356 2983 sources."console-browserify-1.1.0"
2357 2984 (sources."htmlparser2-3.8.3" // {
2358 2985 dependencies = [
2359 2986 sources."readable-stream-1.1.14"
2987 sources."string_decoder-0.10.31"
2360 2988 ];
2361 2989 })
2362 2990 sources."shelljs-0.3.0"
2991 sources."strip-json-comments-1.0.4"
2363 2992 sources."fs.realpath-1.0.0"
2364 sources."inflight-1.0.5"
2365 sources."once-1.4.0"
2366 sources."wrappy-1.0.2"
2367 sources."brace-expansion-1.1.6"
2368 sources."balanced-match-0.4.2"
2993 sources."inflight-1.0.6"
2994 sources."brace-expansion-1.1.8"
2995 sources."balanced-match-1.0.0"
2369 2996 sources."concat-map-0.0.1"
2370 2997 sources."date-now-0.1.4"
2371 2998 sources."domhandler-2.3.0"
2372 2999 sources."domutils-1.5.1"
2373 3000 sources."domelementtype-1.3.0"
2374 3001 sources."entities-1.0.0"
2375 3002 (sources."dom-serializer-0.1.0" // {
2376 3003 dependencies = [
2377 3004 sources."domelementtype-1.1.3"
2378 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 3013 meta = {
2383 3014 };
2384 3015 production = false;
2385 3016 };
2386 3017 in
2387 3018 {
2388 3019 tarball = nodeEnv.buildNodeSourceDist args;
2389 3020 package = nodeEnv.buildNodePackage args;
2390 3021 shell = nodeEnv.buildNodeShell args;
2391 3022 } No newline at end of file
@@ -1,2008 +1,2099 b''
1 1 # Generated by pip2nix 0.4.0
2 2 # See https://github.com/johbo/pip2nix
3 3
4 4 {
5 5 Babel = super.buildPythonPackage {
6 6 name = "Babel-1.3";
7 7 buildInputs = with self; [];
8 8 doCheck = false;
9 9 propagatedBuildInputs = with self; [pytz];
10 10 src = fetchurl {
11 11 url = "https://pypi.python.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz";
12 12 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
13 13 };
14 14 meta = {
15 15 license = [ pkgs.lib.licenses.bsdOriginal ];
16 16 };
17 17 };
18 18 Beaker = super.buildPythonPackage {
19 name = "Beaker-1.7.0";
19 name = "Beaker-1.9.0";
20 20 buildInputs = with self; [];
21 21 doCheck = false;
22 propagatedBuildInputs = with self; [];
22 propagatedBuildInputs = with self; [funcsigs];
23 23 src = fetchurl {
24 url = "https://pypi.python.org/packages/97/8e/409d2e7c009b8aa803dc9e6f239f1db7c3cdf578249087a404e7c27a505d/Beaker-1.7.0.tar.gz";
25 md5 = "386be3f7fe427358881eee4622b428b3";
24 url = "https://pypi.python.org/packages/93/b2/12de6937b06e9615dbb3cb3a1c9af17f133f435bdef59f4ad42032b6eb49/Beaker-1.9.0.tar.gz";
25 md5 = "38b3fcdfa24faf97c6cf66991eb54e9c";
26 26 };
27 27 meta = {
28 28 license = [ pkgs.lib.licenses.bsdOriginal ];
29 29 };
30 30 };
31 31 CProfileV = super.buildPythonPackage {
32 name = "CProfileV-1.0.6";
32 name = "CProfileV-1.0.7";
33 33 buildInputs = with self; [];
34 34 doCheck = false;
35 35 propagatedBuildInputs = with self; [bottle];
36 36 src = fetchurl {
37 url = "https://pypi.python.org/packages/eb/df/983a0b6cfd3ac94abf023f5011cb04f33613ace196e33f53c86cf91850d5/CProfileV-1.0.6.tar.gz";
38 md5 = "08c7c242b6e64237bc53c5d13537e03d";
37 url = "https://pypi.python.org/packages/df/50/d8c1ada7d537c64b0f76453fa31dedb6af6e27b82fcf0331e5f71a4cf98b/CProfileV-1.0.7.tar.gz";
38 md5 = "db4c7640438aa3d8887e194c81c7a019";
39 39 };
40 40 meta = {
41 41 license = [ pkgs.lib.licenses.mit ];
42 42 };
43 43 };
44 44 Chameleon = super.buildPythonPackage {
45 45 name = "Chameleon-2.24";
46 46 buildInputs = with self; [];
47 47 doCheck = false;
48 48 propagatedBuildInputs = with self; [];
49 49 src = fetchurl {
50 50 url = "https://pypi.python.org/packages/5a/9e/637379ffa13c5172b5c0e704833ffea6bf51cec7567f93fd6e903d53ed74/Chameleon-2.24.tar.gz";
51 51 md5 = "1b01f1f6533a8a11d0d2f2366dec5342";
52 52 };
53 53 meta = {
54 54 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
55 55 };
56 56 };
57 57 FormEncode = super.buildPythonPackage {
58 58 name = "FormEncode-1.2.4";
59 59 buildInputs = with self; [];
60 60 doCheck = false;
61 61 propagatedBuildInputs = with self; [];
62 62 src = fetchurl {
63 63 url = "https://pypi.python.org/packages/8e/59/0174271a6f004512e0201188593e6d319db139d14cb7490e488bbb078015/FormEncode-1.2.4.tar.gz";
64 64 md5 = "6bc17fb9aed8aea198975e888e2077f4";
65 65 };
66 66 meta = {
67 67 license = [ pkgs.lib.licenses.psfl ];
68 68 };
69 69 };
70 70 Jinja2 = super.buildPythonPackage {
71 71 name = "Jinja2-2.7.3";
72 72 buildInputs = with self; [];
73 73 doCheck = false;
74 74 propagatedBuildInputs = with self; [MarkupSafe];
75 75 src = fetchurl {
76 76 url = "https://pypi.python.org/packages/b0/73/eab0bca302d6d6a0b5c402f47ad1760dc9cb2dd14bbc1873ad48db258e4d/Jinja2-2.7.3.tar.gz";
77 77 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
78 78 };
79 79 meta = {
80 80 license = [ pkgs.lib.licenses.bsdOriginal ];
81 81 };
82 82 };
83 83 Mako = super.buildPythonPackage {
84 name = "Mako-1.0.6";
84 name = "Mako-1.0.7";
85 85 buildInputs = with self; [];
86 86 doCheck = false;
87 87 propagatedBuildInputs = with self; [MarkupSafe];
88 88 src = fetchurl {
89 url = "https://pypi.python.org/packages/56/4b/cb75836863a6382199aefb3d3809937e21fa4cb0db15a4f4ba0ecc2e7e8e/Mako-1.0.6.tar.gz";
90 md5 = "a28e22a339080316b2acc352b9ee631c";
89 url = "https://pypi.python.org/packages/eb/f3/67579bb486517c0d49547f9697e36582cd19dafb5df9e687ed8e22de57fa/Mako-1.0.7.tar.gz";
90 md5 = "5836cc997b1b773ef389bf6629c30e65";
91 91 };
92 92 meta = {
93 93 license = [ pkgs.lib.licenses.mit ];
94 94 };
95 95 };
96 96 Markdown = super.buildPythonPackage {
97 name = "Markdown-2.6.7";
97 name = "Markdown-2.6.8";
98 98 buildInputs = with self; [];
99 99 doCheck = false;
100 100 propagatedBuildInputs = with self; [];
101 101 src = fetchurl {
102 url = "https://pypi.python.org/packages/48/a4/fc6b002789c2239ac620ca963694c95b8f74e4747769cdf6021276939e74/Markdown-2.6.7.zip";
103 md5 = "632710a7474bbb74a82084392251061f";
102 url = "https://pypi.python.org/packages/1d/25/3f6d2cb31ec42ca5bd3bfbea99b63892b735d76e26f20dd2dcc34ffe4f0d/Markdown-2.6.8.tar.gz";
103 md5 = "d9ef057a5bd185f6f536400a31fc5d45";
104 104 };
105 105 meta = {
106 106 license = [ pkgs.lib.licenses.bsdOriginal ];
107 107 };
108 108 };
109 109 MarkupSafe = super.buildPythonPackage {
110 110 name = "MarkupSafe-0.23";
111 111 buildInputs = with self; [];
112 112 doCheck = false;
113 113 propagatedBuildInputs = with self; [];
114 114 src = fetchurl {
115 115 url = "https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz";
116 116 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
117 117 };
118 118 meta = {
119 119 license = [ pkgs.lib.licenses.bsdOriginal ];
120 120 };
121 121 };
122 122 MySQL-python = super.buildPythonPackage {
123 123 name = "MySQL-python-1.2.5";
124 124 buildInputs = with self; [];
125 125 doCheck = false;
126 126 propagatedBuildInputs = with self; [];
127 127 src = fetchurl {
128 128 url = "https://pypi.python.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip";
129 129 md5 = "654f75b302db6ed8dc5a898c625e030c";
130 130 };
131 131 meta = {
132 132 license = [ pkgs.lib.licenses.gpl1 ];
133 133 };
134 134 };
135 135 Paste = super.buildPythonPackage {
136 136 name = "Paste-2.0.3";
137 137 buildInputs = with self; [];
138 138 doCheck = false;
139 139 propagatedBuildInputs = with self; [six];
140 140 src = fetchurl {
141 141 url = "https://pypi.python.org/packages/30/c3/5c2f7c7a02e4f58d4454353fa1c32c94f79fa4e36d07a67c0ac295ea369e/Paste-2.0.3.tar.gz";
142 142 md5 = "1231e14eae62fa7ed76e9130b04bc61e";
143 143 };
144 144 meta = {
145 145 license = [ pkgs.lib.licenses.mit ];
146 146 };
147 147 };
148 148 PasteDeploy = super.buildPythonPackage {
149 149 name = "PasteDeploy-1.5.2";
150 150 buildInputs = with self; [];
151 151 doCheck = false;
152 152 propagatedBuildInputs = with self; [];
153 153 src = fetchurl {
154 154 url = "https://pypi.python.org/packages/0f/90/8e20cdae206c543ea10793cbf4136eb9a8b3f417e04e40a29d72d9922cbd/PasteDeploy-1.5.2.tar.gz";
155 155 md5 = "352b7205c78c8de4987578d19431af3b";
156 156 };
157 157 meta = {
158 158 license = [ pkgs.lib.licenses.mit ];
159 159 };
160 160 };
161 161 PasteScript = super.buildPythonPackage {
162 162 name = "PasteScript-1.7.5";
163 163 buildInputs = with self; [];
164 164 doCheck = false;
165 165 propagatedBuildInputs = with self; [Paste PasteDeploy];
166 166 src = fetchurl {
167 167 url = "https://pypi.python.org/packages/a5/05/fc60efa7c2f17a1dbaeccb2a903a1e90902d92b9d00eebabe3095829d806/PasteScript-1.7.5.tar.gz";
168 168 md5 = "4c72d78dcb6bb993f30536842c16af4d";
169 169 };
170 170 meta = {
171 171 license = [ pkgs.lib.licenses.mit ];
172 172 };
173 173 };
174 174 Pygments = super.buildPythonPackage {
175 175 name = "Pygments-2.2.0";
176 176 buildInputs = with self; [];
177 177 doCheck = false;
178 178 propagatedBuildInputs = with self; [];
179 179 src = fetchurl {
180 180 url = "https://pypi.python.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz";
181 181 md5 = "13037baca42f16917cbd5ad2fab50844";
182 182 };
183 183 meta = {
184 184 license = [ pkgs.lib.licenses.bsdOriginal ];
185 185 };
186 186 };
187 187 Pylons = super.buildPythonPackage {
188 188 name = "Pylons-1.0.2.dev20170630";
189 189 buildInputs = with self; [];
190 190 doCheck = false;
191 191 propagatedBuildInputs = with self; [Routes WebHelpers Beaker Paste PasteDeploy PasteScript FormEncode simplejson decorator nose Mako WebError WebTest Tempita MarkupSafe WebOb];
192 192 src = fetchurl {
193 193 url = "https://code.rhodecode.com/upstream/pylons/archive/707354ee4261b9c10450404fc9852ccea4fd667d.tar.gz?md5=f26633726fa2cd3a340316ee6a5d218f";
194 194 md5 = "f26633726fa2cd3a340316ee6a5d218f";
195 195 };
196 196 meta = {
197 197 license = [ pkgs.lib.licenses.bsdOriginal ];
198 198 };
199 199 };
200 200 Routes = super.buildPythonPackage {
201 201 name = "Routes-1.13";
202 202 buildInputs = with self; [];
203 203 doCheck = false;
204 204 propagatedBuildInputs = with self; [repoze.lru];
205 205 src = fetchurl {
206 206 url = "https://pypi.python.org/packages/88/d3/259c3b3cde8837eb9441ab5f574a660e8a4acea8f54a078441d4d2acac1c/Routes-1.13.tar.gz";
207 207 md5 = "d527b0ab7dd9172b1275a41f97448783";
208 208 };
209 209 meta = {
210 210 license = [ pkgs.lib.licenses.bsdOriginal ];
211 211 };
212 212 };
213 213 SQLAlchemy = super.buildPythonPackage {
214 name = "SQLAlchemy-0.9.9";
214 name = "SQLAlchemy-1.1.11";
215 215 buildInputs = with self; [];
216 216 doCheck = false;
217 217 propagatedBuildInputs = with self; [];
218 218 src = fetchurl {
219 url = "https://pypi.python.org/packages/28/f7/1bbfd0d8597e8c358d5e15a166a486ad82fc5579b4e67b6ef7c05b1d182b/SQLAlchemy-0.9.9.tar.gz";
220 md5 = "8a10a9bd13ed3336ef7333ac2cc679ff";
219 url = "https://pypi.python.org/packages/59/f1/28f2205c3175e6bf32300c0f30f9d91dbc9eb910debbff3ffecb88d18528/SQLAlchemy-1.1.11.tar.gz";
220 md5 = "3de387eddb4012083a4562928c511e43";
221 221 };
222 222 meta = {
223 223 license = [ pkgs.lib.licenses.mit ];
224 224 };
225 225 };
226 226 Sphinx = super.buildPythonPackage {
227 227 name = "Sphinx-1.2.2";
228 228 buildInputs = with self; [];
229 229 doCheck = false;
230 230 propagatedBuildInputs = with self; [Pygments docutils Jinja2];
231 231 src = fetchurl {
232 232 url = "https://pypi.python.org/packages/0a/50/34017e6efcd372893a416aba14b84a1a149fc7074537b0e9cb6ca7b7abe9/Sphinx-1.2.2.tar.gz";
233 233 md5 = "3dc73ccaa8d0bfb2d62fb671b1f7e8a4";
234 234 };
235 235 meta = {
236 236 license = [ pkgs.lib.licenses.bsdOriginal ];
237 237 };
238 238 };
239 239 Tempita = super.buildPythonPackage {
240 240 name = "Tempita-0.5.2";
241 241 buildInputs = with self; [];
242 242 doCheck = false;
243 243 propagatedBuildInputs = with self; [];
244 244 src = fetchurl {
245 245 url = "https://pypi.python.org/packages/56/c8/8ed6eee83dbddf7b0fc64dd5d4454bc05e6ccaafff47991f73f2894d9ff4/Tempita-0.5.2.tar.gz";
246 246 md5 = "4c2f17bb9d481821c41b6fbee904cea1";
247 247 };
248 248 meta = {
249 249 license = [ pkgs.lib.licenses.mit ];
250 250 };
251 251 };
252 252 URLObject = super.buildPythonPackage {
253 253 name = "URLObject-2.4.0";
254 254 buildInputs = with self; [];
255 255 doCheck = false;
256 256 propagatedBuildInputs = with self; [];
257 257 src = fetchurl {
258 258 url = "https://pypi.python.org/packages/cb/b6/e25e58500f9caef85d664bec71ec67c116897bfebf8622c32cb75d1ca199/URLObject-2.4.0.tar.gz";
259 259 md5 = "2ed819738a9f0a3051f31dc9924e3065";
260 260 };
261 261 meta = {
262 262 license = [ ];
263 263 };
264 264 };
265 265 WebError = super.buildPythonPackage {
266 266 name = "WebError-0.10.3";
267 267 buildInputs = with self; [];
268 268 doCheck = false;
269 269 propagatedBuildInputs = with self; [WebOb Tempita Pygments Paste];
270 270 src = fetchurl {
271 271 url = "https://pypi.python.org/packages/35/76/e7e5c2ce7e9c7f31b54c1ff295a495886d1279a002557d74dd8957346a79/WebError-0.10.3.tar.gz";
272 272 md5 = "84b9990b0baae6fd440b1e60cdd06f9a";
273 273 };
274 274 meta = {
275 275 license = [ pkgs.lib.licenses.mit ];
276 276 };
277 277 };
278 278 WebHelpers = super.buildPythonPackage {
279 279 name = "WebHelpers-1.3";
280 280 buildInputs = with self; [];
281 281 doCheck = false;
282 282 propagatedBuildInputs = with self; [MarkupSafe];
283 283 src = fetchurl {
284 284 url = "https://pypi.python.org/packages/ee/68/4d07672821d514184357f1552f2dad923324f597e722de3b016ca4f7844f/WebHelpers-1.3.tar.gz";
285 285 md5 = "32749ffadfc40fea51075a7def32588b";
286 286 };
287 287 meta = {
288 288 license = [ pkgs.lib.licenses.bsdOriginal ];
289 289 };
290 290 };
291 291 WebHelpers2 = super.buildPythonPackage {
292 292 name = "WebHelpers2-2.0";
293 293 buildInputs = with self; [];
294 294 doCheck = false;
295 295 propagatedBuildInputs = with self; [MarkupSafe six];
296 296 src = fetchurl {
297 297 url = "https://pypi.python.org/packages/ff/30/56342c6ea522439e3662427c8d7b5e5b390dff4ff2dc92d8afcb8ab68b75/WebHelpers2-2.0.tar.gz";
298 298 md5 = "0f6b68d70c12ee0aed48c00b24da13d3";
299 299 };
300 300 meta = {
301 301 license = [ pkgs.lib.licenses.mit ];
302 302 };
303 303 };
304 304 WebOb = super.buildPythonPackage {
305 name = "WebOb-1.3.1";
305 name = "WebOb-1.7.3";
306 306 buildInputs = with self; [];
307 307 doCheck = false;
308 308 propagatedBuildInputs = with self; [];
309 309 src = fetchurl {
310 url = "https://pypi.python.org/packages/16/78/adfc0380b8a0d75b2d543fa7085ba98a573b1ae486d9def88d172b81b9fa/WebOb-1.3.1.tar.gz";
311 md5 = "20918251c5726956ba8fef22d1556177";
310 url = "https://pypi.python.org/packages/46/87/2f96d8d43b2078fae6e1d33fa86b95c228cebed060f4e3c7576cc44ea83b/WebOb-1.7.3.tar.gz";
311 md5 = "350028baffc508e3d23c078118e35316";
312 312 };
313 313 meta = {
314 314 license = [ pkgs.lib.licenses.mit ];
315 315 };
316 316 };
317 317 WebTest = super.buildPythonPackage {
318 name = "WebTest-1.4.3";
318 name = "WebTest-2.0.27";
319 319 buildInputs = with self; [];
320 320 doCheck = false;
321 propagatedBuildInputs = with self; [WebOb];
321 propagatedBuildInputs = with self; [six WebOb waitress beautifulsoup4];
322 322 src = fetchurl {
323 url = "https://pypi.python.org/packages/51/3d/84fd0f628df10b30c7db87895f56d0158e5411206b721ca903cb51bfd948/WebTest-1.4.3.zip";
324 md5 = "631ce728bed92c681a4020a36adbc353";
323 url = "https://pypi.python.org/packages/80/fa/ca3a759985c72e3a124cbca3e1f8a2e931a07ffd31fd45d8f7bf21cb95cf/WebTest-2.0.27.tar.gz";
324 md5 = "54e6515ac71c51b6fc90179483c749ad";
325 325 };
326 326 meta = {
327 327 license = [ pkgs.lib.licenses.mit ];
328 328 };
329 329 };
330 330 Whoosh = super.buildPythonPackage {
331 331 name = "Whoosh-2.7.4";
332 332 buildInputs = with self; [];
333 333 doCheck = false;
334 334 propagatedBuildInputs = with self; [];
335 335 src = fetchurl {
336 336 url = "https://pypi.python.org/packages/25/2b/6beed2107b148edc1321da0d489afc4617b9ed317ef7b72d4993cad9b684/Whoosh-2.7.4.tar.gz";
337 337 md5 = "c2710105f20b3e29936bd2357383c325";
338 338 };
339 339 meta = {
340 340 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.bsd2 ];
341 341 };
342 342 };
343 343 alembic = super.buildPythonPackage {
344 name = "alembic-0.8.4";
344 name = "alembic-0.9.2";
345 345 buildInputs = with self; [];
346 346 doCheck = false;
347 propagatedBuildInputs = with self; [SQLAlchemy Mako python-editor];
347 propagatedBuildInputs = with self; [SQLAlchemy Mako python-editor python-dateutil];
348 348 src = fetchurl {
349 url = "https://pypi.python.org/packages/ca/7e/299b4499b5c75e5a38c5845145ad24755bebfb8eec07a2e1c366b7181eeb/alembic-0.8.4.tar.gz";
350 md5 = "5f95d8ee62b443f9b37eb5bee76c582d";
349 url = "https://pypi.python.org/packages/78/48/b5b26e7218b415f40b60b92c53853d242e5456c0f19f6c66101d98ff5f2a/alembic-0.9.2.tar.gz";
350 md5 = "40daf8bae50969beea40efaaf0839ff4";
351 351 };
352 352 meta = {
353 353 license = [ pkgs.lib.licenses.mit ];
354 354 };
355 355 };
356 356 amqplib = super.buildPythonPackage {
357 357 name = "amqplib-1.0.2";
358 358 buildInputs = with self; [];
359 359 doCheck = false;
360 360 propagatedBuildInputs = with self; [];
361 361 src = fetchurl {
362 362 url = "https://pypi.python.org/packages/75/b7/8c2429bf8d92354a0118614f9a4d15e53bc69ebedce534284111de5a0102/amqplib-1.0.2.tgz";
363 363 md5 = "5c92f17fbedd99b2b4a836d4352d1e2f";
364 364 };
365 365 meta = {
366 366 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
367 367 };
368 368 };
369 369 anyjson = super.buildPythonPackage {
370 370 name = "anyjson-0.3.3";
371 371 buildInputs = with self; [];
372 372 doCheck = false;
373 373 propagatedBuildInputs = with self; [];
374 374 src = fetchurl {
375 375 url = "https://pypi.python.org/packages/c3/4d/d4089e1a3dd25b46bebdb55a992b0797cff657b4477bc32ce28038fdecbc/anyjson-0.3.3.tar.gz";
376 376 md5 = "2ea28d6ec311aeeebaf993cb3008b27c";
377 377 };
378 378 meta = {
379 379 license = [ pkgs.lib.licenses.bsdOriginal ];
380 380 };
381 381 };
382 382 appenlight-client = super.buildPythonPackage {
383 name = "appenlight-client-0.6.14";
383 name = "appenlight-client-0.6.21";
384 384 buildInputs = with self; [];
385 385 doCheck = false;
386 propagatedBuildInputs = with self; [WebOb requests];
386 propagatedBuildInputs = with self; [WebOb requests six];
387 387 src = fetchurl {
388 url = "https://pypi.python.org/packages/4d/e0/23fee3ebada8143f707e65c06bcb82992040ee64ea8355e044ed55ebf0c1/appenlight_client-0.6.14.tar.gz";
389 md5 = "578c69b09f4356d898fff1199b98a95c";
388 url = "https://pypi.python.org/packages/c9/23/91b66cfa0b963662c10b2a06ccaadf3f3a4848a7a2aa16255cb43d5160ec/appenlight_client-0.6.21.tar.gz";
389 md5 = "273999ac854fdaefa8d0fb61965a4ed9";
390 390 };
391 391 meta = {
392 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "DFSG approved"; } ];
392 license = [ pkgs.lib.licenses.bsdOriginal ];
393 393 };
394 394 };
395 395 authomatic = super.buildPythonPackage {
396 396 name = "authomatic-0.1.0.post1";
397 397 buildInputs = with self; [];
398 398 doCheck = false;
399 399 propagatedBuildInputs = with self; [];
400 400 src = fetchurl {
401 401 url = "https://pypi.python.org/packages/08/1a/8a930461e604c2d5a7a871e1ac59fa82ccf994c32e807230c8d2fb07815a/Authomatic-0.1.0.post1.tar.gz";
402 402 md5 = "be3f3ce08747d776aae6d6cc8dcb49a9";
403 403 };
404 404 meta = {
405 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 408 backports.shutil-get-terminal-size = super.buildPythonPackage {
422 409 name = "backports.shutil-get-terminal-size-1.0.0";
423 410 buildInputs = with self; [];
424 411 doCheck = false;
425 412 propagatedBuildInputs = with self; [];
426 413 src = fetchurl {
427 414 url = "https://pypi.python.org/packages/ec/9c/368086faa9c016efce5da3e0e13ba392c9db79e3ab740b763fe28620b18b/backports.shutil_get_terminal_size-1.0.0.tar.gz";
428 415 md5 = "03267762480bd86b50580dc19dff3c66";
429 416 };
430 417 meta = {
431 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 434 bleach = super.buildPythonPackage {
435 435 name = "bleach-1.5.0";
436 436 buildInputs = with self; [];
437 437 doCheck = false;
438 438 propagatedBuildInputs = with self; [six html5lib];
439 439 src = fetchurl {
440 440 url = "https://pypi.python.org/packages/99/00/25a8fce4de102bf6e3cc76bc4ea60685b2fee33bde1b34830c70cacc26a7/bleach-1.5.0.tar.gz";
441 441 md5 = "b663300efdf421b3b727b19d7be9c7e7";
442 442 };
443 443 meta = {
444 444 license = [ pkgs.lib.licenses.asl20 ];
445 445 };
446 446 };
447 447 bottle = super.buildPythonPackage {
448 448 name = "bottle-0.12.8";
449 449 buildInputs = with self; [];
450 450 doCheck = false;
451 451 propagatedBuildInputs = with self; [];
452 452 src = fetchurl {
453 453 url = "https://pypi.python.org/packages/52/df/e4a408f3a7af396d186d4ecd3b389dd764f0f943b4fa8d257bfe7b49d343/bottle-0.12.8.tar.gz";
454 454 md5 = "13132c0a8f607bf860810a6ee9064c5b";
455 455 };
456 456 meta = {
457 457 license = [ pkgs.lib.licenses.mit ];
458 458 };
459 459 };
460 460 bumpversion = super.buildPythonPackage {
461 461 name = "bumpversion-0.5.3";
462 462 buildInputs = with self; [];
463 463 doCheck = false;
464 464 propagatedBuildInputs = with self; [];
465 465 src = fetchurl {
466 466 url = "https://pypi.python.org/packages/14/41/8c9da3549f8e00c84f0432c3a8cf8ed6898374714676aab91501d48760db/bumpversion-0.5.3.tar.gz";
467 467 md5 = "c66a3492eafcf5ad4b024be9fca29820";
468 468 };
469 469 meta = {
470 470 license = [ pkgs.lib.licenses.mit ];
471 471 };
472 472 };
473 473 celery = super.buildPythonPackage {
474 474 name = "celery-2.2.10";
475 475 buildInputs = with self; [];
476 476 doCheck = false;
477 477 propagatedBuildInputs = with self; [python-dateutil anyjson kombu pyparsing];
478 478 src = fetchurl {
479 479 url = "https://pypi.python.org/packages/b1/64/860fd50e45844c83442e7953effcddeff66b2851d90b2d784f7201c111b8/celery-2.2.10.tar.gz";
480 480 md5 = "898bc87e54f278055b561316ba73e222";
481 481 };
482 482 meta = {
483 483 license = [ pkgs.lib.licenses.bsdOriginal ];
484 484 };
485 485 };
486 486 channelstream = super.buildPythonPackage {
487 487 name = "channelstream-0.5.2";
488 488 buildInputs = with self; [];
489 489 doCheck = false;
490 490 propagatedBuildInputs = with self; [gevent ws4py pyramid pyramid-jinja2 itsdangerous requests six];
491 491 src = fetchurl {
492 492 url = "https://pypi.python.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz";
493 493 md5 = "1c5eb2a8a405be6f1073da94da6d81d3";
494 494 };
495 495 meta = {
496 496 license = [ pkgs.lib.licenses.bsdOriginal ];
497 497 };
498 498 };
499 499 click = super.buildPythonPackage {
500 500 name = "click-5.1";
501 501 buildInputs = with self; [];
502 502 doCheck = false;
503 503 propagatedBuildInputs = with self; [];
504 504 src = fetchurl {
505 505 url = "https://pypi.python.org/packages/b7/34/a496632c4fb6c1ee76efedf77bb8d28b29363d839953d95095b12defe791/click-5.1.tar.gz";
506 506 md5 = "9c5323008cccfe232a8b161fc8196d41";
507 507 };
508 508 meta = {
509 509 license = [ pkgs.lib.licenses.bsdOriginal ];
510 510 };
511 511 };
512 512 colander = super.buildPythonPackage {
513 name = "colander-1.2";
513 name = "colander-1.3.3";
514 514 buildInputs = with self; [];
515 515 doCheck = false;
516 516 propagatedBuildInputs = with self; [translationstring iso8601];
517 517 src = fetchurl {
518 url = "https://pypi.python.org/packages/14/23/c9ceba07a6a1dc0eefbb215fc0dc64aabc2b22ee756bc0f0c13278fa0887/colander-1.2.tar.gz";
519 md5 = "83db21b07936a0726e588dae1914b9ed";
518 url = "https://pypi.python.org/packages/54/a9/9862a561e015b2c7b56404c0b13828a8bdc51e05ab3703bd792cec064487/colander-1.3.3.tar.gz";
519 md5 = "f5d783768c51d73695f49bbe95778ab4";
520 520 };
521 521 meta = {
522 522 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
523 523 };
524 524 };
525 525 configobj = super.buildPythonPackage {
526 526 name = "configobj-5.0.6";
527 527 buildInputs = with self; [];
528 528 doCheck = false;
529 529 propagatedBuildInputs = with self; [six];
530 530 src = fetchurl {
531 531 url = "https://pypi.python.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz";
532 532 md5 = "e472a3a1c2a67bb0ec9b5d54c13a47d6";
533 533 };
534 534 meta = {
535 535 license = [ pkgs.lib.licenses.bsdOriginal ];
536 536 };
537 537 };
538 538 configparser = super.buildPythonPackage {
539 539 name = "configparser-3.5.0";
540 540 buildInputs = with self; [];
541 541 doCheck = false;
542 542 propagatedBuildInputs = with self; [];
543 543 src = fetchurl {
544 544 url = "https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/configparser-3.5.0.tar.gz";
545 545 md5 = "cfdd915a5b7a6c09917a64a573140538";
546 546 };
547 547 meta = {
548 548 license = [ pkgs.lib.licenses.mit ];
549 549 };
550 550 };
551 551 cov-core = super.buildPythonPackage {
552 552 name = "cov-core-1.15.0";
553 553 buildInputs = with self; [];
554 554 doCheck = false;
555 555 propagatedBuildInputs = with self; [coverage];
556 556 src = fetchurl {
557 557 url = "https://pypi.python.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
558 558 md5 = "f519d4cb4c4e52856afb14af52919fe6";
559 559 };
560 560 meta = {
561 561 license = [ pkgs.lib.licenses.mit ];
562 562 };
563 563 };
564 564 coverage = super.buildPythonPackage {
565 565 name = "coverage-3.7.1";
566 566 buildInputs = with self; [];
567 567 doCheck = false;
568 568 propagatedBuildInputs = with self; [];
569 569 src = fetchurl {
570 570 url = "https://pypi.python.org/packages/09/4f/89b06c7fdc09687bca507dc411c342556ef9c5a3b26756137a4878ff19bf/coverage-3.7.1.tar.gz";
571 571 md5 = "c47b36ceb17eaff3ecfab3bcd347d0df";
572 572 };
573 573 meta = {
574 574 license = [ pkgs.lib.licenses.bsdOriginal ];
575 575 };
576 576 };
577 577 cssselect = super.buildPythonPackage {
578 578 name = "cssselect-1.0.1";
579 579 buildInputs = with self; [];
580 580 doCheck = false;
581 581 propagatedBuildInputs = with self; [];
582 582 src = fetchurl {
583 583 url = "https://pypi.python.org/packages/77/ff/9c865275cd19290feba56344eba570e719efb7ca5b34d67ed12b22ebbb0d/cssselect-1.0.1.tar.gz";
584 584 md5 = "3fa03bf82a9f0b1223c0f1eb1369e139";
585 585 };
586 586 meta = {
587 587 license = [ pkgs.lib.licenses.bsdOriginal ];
588 588 };
589 589 };
590 590 decorator = super.buildPythonPackage {
591 591 name = "decorator-4.0.11";
592 592 buildInputs = with self; [];
593 593 doCheck = false;
594 594 propagatedBuildInputs = with self; [];
595 595 src = fetchurl {
596 596 url = "https://pypi.python.org/packages/cc/ac/5a16f1fc0506ff72fcc8fd4e858e3a1c231f224ab79bb7c4c9b2094cc570/decorator-4.0.11.tar.gz";
597 597 md5 = "73644c8f0bd4983d1b6a34b49adec0ae";
598 598 };
599 599 meta = {
600 600 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "new BSD License"; } ];
601 601 };
602 602 };
603 603 deform = super.buildPythonPackage {
604 604 name = "deform-2.0.4";
605 605 buildInputs = with self; [];
606 606 doCheck = false;
607 607 propagatedBuildInputs = with self; [Chameleon colander iso8601 peppercorn translationstring zope.deprecation];
608 608 src = fetchurl {
609 609 url = "https://pypi.python.org/packages/66/3b/eefcb07abcab7a97f6665aa2d0cf1af741d9d6e78a2e4657fd2b89f89880/deform-2.0.4.tar.gz";
610 610 md5 = "34756e42cf50dd4b4430809116c4ec0a";
611 611 };
612 612 meta = {
613 613 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
614 614 };
615 615 };
616 616 docutils = super.buildPythonPackage {
617 name = "docutils-0.12";
617 name = "docutils-0.13.1";
618 618 buildInputs = with self; [];
619 619 doCheck = false;
620 620 propagatedBuildInputs = with self; [];
621 621 src = fetchurl {
622 url = "https://pypi.python.org/packages/37/38/ceda70135b9144d84884ae2fc5886c6baac4edea39550f28bcd144c1234d/docutils-0.12.tar.gz";
623 md5 = "4622263b62c5c771c03502afa3157768";
622 url = "https://pypi.python.org/packages/05/25/7b5484aca5d46915493f1fd4ecb63c38c333bd32aa9ad6e19da8d08895ae/docutils-0.13.1.tar.gz";
623 md5 = "ea4a893c633c788be9b8078b6b305d53";
624 624 };
625 625 meta = {
626 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 629 dogpile.cache = super.buildPythonPackage {
630 name = "dogpile.cache-0.6.1";
630 name = "dogpile.cache-0.6.4";
631 631 buildInputs = with self; [];
632 632 doCheck = false;
633 633 propagatedBuildInputs = with self; [];
634 634 src = fetchurl {
635 url = "https://pypi.python.org/packages/f6/a0/6f2142c58c6588d17c734265b103ae1cd0741e1681dd9483a63f22033375/dogpile.cache-0.6.1.tar.gz";
636 md5 = "35d7fb30f22bbd0685763d894dd079a9";
635 url = "https://pypi.python.org/packages/b6/3d/35c05ca01c070bb70d9d422f2c4858ecb021b05b21af438fec5ccd7b945c/dogpile.cache-0.6.4.tar.gz";
636 md5 = "66e0a6cae6c08cb1ea25f89d0eadfeb0";
637 637 };
638 638 meta = {
639 639 license = [ pkgs.lib.licenses.bsdOriginal ];
640 640 };
641 641 };
642 642 dogpile.core = super.buildPythonPackage {
643 643 name = "dogpile.core-0.4.1";
644 644 buildInputs = with self; [];
645 645 doCheck = false;
646 646 propagatedBuildInputs = with self; [];
647 647 src = fetchurl {
648 648 url = "https://pypi.python.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
649 649 md5 = "01cb19f52bba3e95c9b560f39341f045";
650 650 };
651 651 meta = {
652 652 license = [ pkgs.lib.licenses.bsdOriginal ];
653 653 };
654 654 };
655 655 ecdsa = super.buildPythonPackage {
656 name = "ecdsa-0.11";
656 name = "ecdsa-0.13";
657 657 buildInputs = with self; [];
658 658 doCheck = false;
659 659 propagatedBuildInputs = with self; [];
660 660 src = fetchurl {
661 url = "https://pypi.python.org/packages/6c/3f/92fe5dcdcaa7bd117be21e5520c9a54375112b66ec000d209e9e9519fad1/ecdsa-0.11.tar.gz";
662 md5 = "8ef586fe4dbb156697d756900cb41d7c";
661 url = "https://pypi.python.org/packages/f9/e5/99ebb176e47f150ac115ffeda5fedb6a3dbb3c00c74a59fd84ddf12f5857/ecdsa-0.13.tar.gz";
662 md5 = "1f60eda9cb5c46722856db41a3ae6670";
663 663 };
664 664 meta = {
665 665 license = [ pkgs.lib.licenses.mit ];
666 666 };
667 667 };
668 668 elasticsearch = super.buildPythonPackage {
669 669 name = "elasticsearch-2.3.0";
670 670 buildInputs = with self; [];
671 671 doCheck = false;
672 672 propagatedBuildInputs = with self; [urllib3];
673 673 src = fetchurl {
674 674 url = "https://pypi.python.org/packages/10/35/5fd52c5f0b0ee405ed4b5195e8bce44c5e041787680dc7b94b8071cac600/elasticsearch-2.3.0.tar.gz";
675 675 md5 = "2550f3b51629cf1ef9636608af92c340";
676 676 };
677 677 meta = {
678 678 license = [ pkgs.lib.licenses.asl20 ];
679 679 };
680 680 };
681 681 elasticsearch-dsl = super.buildPythonPackage {
682 682 name = "elasticsearch-dsl-2.2.0";
683 683 buildInputs = with self; [];
684 684 doCheck = false;
685 685 propagatedBuildInputs = with self; [six python-dateutil elasticsearch];
686 686 src = fetchurl {
687 687 url = "https://pypi.python.org/packages/66/2f/52a086968788e58461641570f45c3207a52d46ebbe9b77dc22b6a8ffda66/elasticsearch-dsl-2.2.0.tar.gz";
688 688 md5 = "fa6bd3c87ea3caa8f0f051bc37c53221";
689 689 };
690 690 meta = {
691 691 license = [ pkgs.lib.licenses.asl20 ];
692 692 };
693 693 };
694 694 entrypoints = super.buildPythonPackage {
695 695 name = "entrypoints-0.2.2";
696 696 buildInputs = with self; [];
697 697 doCheck = false;
698 698 propagatedBuildInputs = with self; [configparser];
699 699 src = fetchurl {
700 700 url = "https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313";
701 701 md5 = "7db37771aea9ac9fefe093e5d6987313";
702 702 };
703 703 meta = {
704 704 license = [ pkgs.lib.licenses.mit ];
705 705 };
706 706 };
707 707 enum34 = super.buildPythonPackage {
708 708 name = "enum34-1.1.6";
709 709 buildInputs = with self; [];
710 710 doCheck = false;
711 711 propagatedBuildInputs = with self; [];
712 712 src = fetchurl {
713 713 url = "https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz";
714 714 md5 = "5f13a0841a61f7fc295c514490d120d0";
715 715 };
716 716 meta = {
717 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 733 functools32 = super.buildPythonPackage {
721 734 name = "functools32-3.2.3.post2";
722 735 buildInputs = with self; [];
723 736 doCheck = false;
724 737 propagatedBuildInputs = with self; [];
725 738 src = fetchurl {
726 739 url = "https://pypi.python.org/packages/5e/1a/0aa2c8195a204a9f51284018562dea77e25511f02fe924fac202fc012172/functools32-3.2.3-2.zip";
727 740 md5 = "d55232eb132ec779e6893c902a0bc5ad";
728 741 };
729 742 meta = {
730 743 license = [ pkgs.lib.licenses.psfl ];
731 744 };
732 745 };
733 746 future = super.buildPythonPackage {
734 747 name = "future-0.14.3";
735 748 buildInputs = with self; [];
736 749 doCheck = false;
737 750 propagatedBuildInputs = with self; [];
738 751 src = fetchurl {
739 752 url = "https://pypi.python.org/packages/83/80/8ef3a11a15f8eaafafa0937b20c1b3f73527e69ab6b3fa1cf94a5a96aabb/future-0.14.3.tar.gz";
740 753 md5 = "e94079b0bd1fc054929e8769fc0f6083";
741 754 };
742 755 meta = {
743 756 license = [ { fullName = "OSI Approved"; } pkgs.lib.licenses.mit ];
744 757 };
745 758 };
746 759 futures = super.buildPythonPackage {
747 760 name = "futures-3.0.2";
748 761 buildInputs = with self; [];
749 762 doCheck = false;
750 763 propagatedBuildInputs = with self; [];
751 764 src = fetchurl {
752 765 url = "https://pypi.python.org/packages/f8/e7/fc0fcbeb9193ba2d4de00b065e7fd5aecd0679e93ce95a07322b2b1434f4/futures-3.0.2.tar.gz";
753 766 md5 = "42aaf1e4de48d6e871d77dc1f9d96d5a";
754 767 };
755 768 meta = {
756 769 license = [ pkgs.lib.licenses.bsdOriginal ];
757 770 };
758 771 };
759 772 gevent = super.buildPythonPackage {
760 name = "gevent-1.1.2";
773 name = "gevent-1.2.2";
761 774 buildInputs = with self; [];
762 775 doCheck = false;
763 776 propagatedBuildInputs = with self; [greenlet];
764 777 src = fetchurl {
765 url = "https://pypi.python.org/packages/43/8f/cb3224a0e6ab663547f45c10d0651cfd52633fde4283bf68d627084df8cc/gevent-1.1.2.tar.gz";
766 md5 = "bb32a2f852a4997138014d5007215c6e";
778 url = "https://pypi.python.org/packages/1b/92/b111f76e54d2be11375b47b213b56687214f258fd9dae703546d30b837be/gevent-1.2.2.tar.gz";
779 md5 = "7f0baf355384fe5ff2ecf66853422554";
767 780 };
768 781 meta = {
769 782 license = [ pkgs.lib.licenses.mit ];
770 783 };
771 784 };
772 785 gnureadline = super.buildPythonPackage {
773 786 name = "gnureadline-6.3.3";
774 787 buildInputs = with self; [];
775 788 doCheck = false;
776 789 propagatedBuildInputs = with self; [];
777 790 src = fetchurl {
778 791 url = "https://pypi.python.org/packages/3a/ee/2c3f568b0a74974791ac590ec742ef6133e2fbd287a074ba72a53fa5e97c/gnureadline-6.3.3.tar.gz";
779 792 md5 = "c4af83c9a3fbeac8f2da9b5a7c60e51c";
780 793 };
781 794 meta = {
782 795 license = [ pkgs.lib.licenses.gpl1 ];
783 796 };
784 797 };
785 798 gprof2dot = super.buildPythonPackage {
786 799 name = "gprof2dot-2016.10.13";
787 800 buildInputs = with self; [];
788 801 doCheck = false;
789 802 propagatedBuildInputs = with self; [];
790 803 src = fetchurl {
791 804 url = "https://pypi.python.org/packages/a0/e0/73c71baed306f0402a00a94ffc7b2be94ad1296dfcb8b46912655b93154c/gprof2dot-2016.10.13.tar.gz";
792 805 md5 = "0125401f15fd2afe1df686a76c64a4fd";
793 806 };
794 807 meta = {
795 808 license = [ { fullName = "LGPL"; } ];
796 809 };
797 810 };
798 811 graphviz = super.buildPythonPackage {
799 name = "graphviz-0.7.1";
812 name = "graphviz-0.8";
800 813 buildInputs = with self; [];
801 814 doCheck = false;
802 815 propagatedBuildInputs = with self; [];
803 816 src = fetchurl {
804 url = "https://pypi.python.org/packages/7d/2d/f5cfa56467ca5a65eb44e1103d89d2f65dbc4f04cf7a1f3d38e973c3d1a8/graphviz-0.7.1.zip";
805 md5 = "d5926e89975121d56dec777a79bfc9d1";
817 url = "https://pypi.python.org/packages/da/84/0e997520323d6b01124eb01c68d5c101814d0aab53083cd62bd75a90f70b/graphviz-0.8.zip";
818 md5 = "9486a885360a5ee54a81eb2950470c71";
806 819 };
807 820 meta = {
808 821 license = [ pkgs.lib.licenses.mit ];
809 822 };
810 823 };
811 824 greenlet = super.buildPythonPackage {
812 name = "greenlet-0.4.10";
825 name = "greenlet-0.4.12";
813 826 buildInputs = with self; [];
814 827 doCheck = false;
815 828 propagatedBuildInputs = with self; [];
816 829 src = fetchurl {
817 url = "https://pypi.python.org/packages/67/62/ca2a95648666eaa2ffeb6a9b3964f21d419ae27f82f2e66b53da5b943fc4/greenlet-0.4.10.zip";
818 md5 = "bed0c4b3b896702131f4d5c72f87c41d";
830 url = "https://pypi.python.org/packages/be/76/82af375d98724054b7e273b5d9369346937324f9bcc20980b45b068ef0b0/greenlet-0.4.12.tar.gz";
831 md5 = "e8637647d58a26c4a1f51ca393e53c00";
819 832 };
820 833 meta = {
821 834 license = [ pkgs.lib.licenses.mit ];
822 835 };
823 836 };
824 837 gunicorn = super.buildPythonPackage {
825 name = "gunicorn-19.6.0";
838 name = "gunicorn-19.7.1";
826 839 buildInputs = with self; [];
827 840 doCheck = false;
828 841 propagatedBuildInputs = with self; [];
829 842 src = fetchurl {
830 url = "https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/gunicorn-19.6.0.tar.gz";
831 md5 = "338e5e8a83ea0f0625f768dba4597530";
843 url = "https://pypi.python.org/packages/30/3a/10bb213cede0cc4d13ac2263316c872a64bf4c819000c8ccd801f1d5f822/gunicorn-19.7.1.tar.gz";
844 md5 = "174d3c3cd670a5be0404d84c484e590c";
832 845 };
833 846 meta = {
834 847 license = [ pkgs.lib.licenses.mit ];
835 848 };
836 849 };
837 850 html5lib = super.buildPythonPackage {
838 851 name = "html5lib-0.9999999";
839 852 buildInputs = with self; [];
840 853 doCheck = false;
841 854 propagatedBuildInputs = with self; [six];
842 855 src = fetchurl {
843 856 url = "https://pypi.python.org/packages/ae/ae/bcb60402c60932b32dfaf19bb53870b29eda2cd17551ba5639219fb5ebf9/html5lib-0.9999999.tar.gz";
844 857 md5 = "ef43cb05e9e799f25d65d1135838a96f";
845 858 };
846 859 meta = {
847 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 876 infrae.cache = super.buildPythonPackage {
851 877 name = "infrae.cache-1.0.1";
852 878 buildInputs = with self; [];
853 879 doCheck = false;
854 880 propagatedBuildInputs = with self; [Beaker repoze.lru];
855 881 src = fetchurl {
856 882 url = "https://pypi.python.org/packages/bb/f0/e7d5e984cf6592fd2807dc7bc44a93f9d18e04e6a61f87fdfb2622422d74/infrae.cache-1.0.1.tar.gz";
857 883 md5 = "b09076a766747e6ed2a755cc62088e32";
858 884 };
859 885 meta = {
860 886 license = [ pkgs.lib.licenses.zpt21 ];
861 887 };
862 888 };
863 889 invoke = super.buildPythonPackage {
864 890 name = "invoke-0.13.0";
865 891 buildInputs = with self; [];
866 892 doCheck = false;
867 893 propagatedBuildInputs = with self; [];
868 894 src = fetchurl {
869 895 url = "https://pypi.python.org/packages/47/bf/d07ef52fa1ac645468858bbac7cb95b246a972a045e821493d17d89c81be/invoke-0.13.0.tar.gz";
870 896 md5 = "c0d1ed4bfb34eaab551662d8cfee6540";
871 897 };
872 898 meta = {
873 899 license = [ pkgs.lib.licenses.bsdOriginal ];
874 900 };
875 901 };
876 ipdb = super.buildPythonPackage {
877 name = "ipdb-0.10.1";
902 ipaddress = super.buildPythonPackage {
903 name = "ipaddress-1.0.18";
878 904 buildInputs = with self; [];
879 905 doCheck = false;
880 propagatedBuildInputs = with self; [ipython setuptools];
906 propagatedBuildInputs = with self; [];
881 907 src = fetchurl {
882 url = "https://pypi.python.org/packages/eb/0a/0a37dc19572580336ad3813792c0d18c8d7117c2d66fc63c501f13a7a8f8/ipdb-0.10.1.tar.gz";
883 md5 = "4aeab65f633ddc98ebdb5eebf08dc713";
908 url = "https://pypi.python.org/packages/4e/13/774faf38b445d0b3a844b65747175b2e0500164b7c28d78e34987a5bfe06/ipaddress-1.0.18.tar.gz";
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 924 meta = {
886 925 license = [ pkgs.lib.licenses.bsdOriginal ];
887 926 };
888 927 };
889 928 ipython = super.buildPythonPackage {
890 929 name = "ipython-5.1.0";
891 930 buildInputs = with self; [];
892 931 doCheck = false;
893 932 propagatedBuildInputs = with self; [setuptools decorator pickleshare simplegeneric traitlets prompt-toolkit Pygments pexpect backports.shutil-get-terminal-size pathlib2 pexpect];
894 933 src = fetchurl {
895 934 url = "https://pypi.python.org/packages/89/63/a9292f7cd9d0090a0f995e1167f3f17d5889dcbc9a175261719c513b9848/ipython-5.1.0.tar.gz";
896 935 md5 = "47c8122420f65b58784cb4b9b4af35e3";
897 936 };
898 937 meta = {
899 938 license = [ pkgs.lib.licenses.bsdOriginal ];
900 939 };
901 940 };
902 941 ipython-genutils = super.buildPythonPackage {
903 942 name = "ipython-genutils-0.2.0";
904 943 buildInputs = with self; [];
905 944 doCheck = false;
906 945 propagatedBuildInputs = with self; [];
907 946 src = fetchurl {
908 947 url = "https://pypi.python.org/packages/e8/69/fbeffffc05236398ebfcfb512b6d2511c622871dca1746361006da310399/ipython_genutils-0.2.0.tar.gz";
909 948 md5 = "5a4f9781f78466da0ea1a648f3e1f79f";
910 949 };
911 950 meta = {
912 951 license = [ pkgs.lib.licenses.bsdOriginal ];
913 952 };
914 953 };
915 954 iso8601 = super.buildPythonPackage {
916 955 name = "iso8601-0.1.11";
917 956 buildInputs = with self; [];
918 957 doCheck = false;
919 958 propagatedBuildInputs = with self; [];
920 959 src = fetchurl {
921 960 url = "https://pypi.python.org/packages/c0/75/c9209ee4d1b5975eb8c2cba4428bde6b61bd55664a98290dd015cdb18e98/iso8601-0.1.11.tar.gz";
922 961 md5 = "b06d11cd14a64096f907086044f0fe38";
923 962 };
924 963 meta = {
925 964 license = [ pkgs.lib.licenses.mit ];
926 965 };
927 966 };
928 967 itsdangerous = super.buildPythonPackage {
929 968 name = "itsdangerous-0.24";
930 969 buildInputs = with self; [];
931 970 doCheck = false;
932 971 propagatedBuildInputs = with self; [];
933 972 src = fetchurl {
934 973 url = "https://pypi.python.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz";
935 974 md5 = "a3d55aa79369aef5345c036a8a26307f";
936 975 };
937 976 meta = {
938 977 license = [ pkgs.lib.licenses.bsdOriginal ];
939 978 };
940 979 };
941 980 jsonschema = super.buildPythonPackage {
942 981 name = "jsonschema-2.6.0";
943 982 buildInputs = with self; [];
944 983 doCheck = false;
945 984 propagatedBuildInputs = with self; [functools32];
946 985 src = fetchurl {
947 986 url = "https://pypi.python.org/packages/58/b9/171dbb07e18c6346090a37f03c7e74410a1a56123f847efed59af260a298/jsonschema-2.6.0.tar.gz";
948 987 md5 = "50c6b69a373a8b55ff1e0ec6e78f13f4";
949 988 };
950 989 meta = {
951 990 license = [ pkgs.lib.licenses.mit ];
952 991 };
953 992 };
954 993 jupyter-client = super.buildPythonPackage {
955 994 name = "jupyter-client-5.0.0";
956 995 buildInputs = with self; [];
957 996 doCheck = false;
958 997 propagatedBuildInputs = with self; [traitlets jupyter-core pyzmq python-dateutil];
959 998 src = fetchurl {
960 999 url = "https://pypi.python.org/packages/e5/6f/65412ed462202b90134b7e761b0b7e7f949e07a549c1755475333727b3d0/jupyter_client-5.0.0.tar.gz";
961 1000 md5 = "1acd331b5c9fb4d79dae9939e79f2426";
962 1001 };
963 1002 meta = {
964 1003 license = [ pkgs.lib.licenses.bsdOriginal ];
965 1004 };
966 1005 };
967 1006 jupyter-core = super.buildPythonPackage {
968 1007 name = "jupyter-core-4.3.0";
969 1008 buildInputs = with self; [];
970 1009 doCheck = false;
971 1010 propagatedBuildInputs = with self; [traitlets];
972 1011 src = fetchurl {
973 1012 url = "https://pypi.python.org/packages/2f/39/5138f975100ce14d150938df48a83cd852a3fd8e24b1244f4113848e69e2/jupyter_core-4.3.0.tar.gz";
974 1013 md5 = "18819511a809afdeed9a995a9c27bcfb";
975 1014 };
976 1015 meta = {
977 1016 license = [ pkgs.lib.licenses.bsdOriginal ];
978 1017 };
979 1018 };
980 1019 kombu = super.buildPythonPackage {
981 1020 name = "kombu-1.5.1";
982 1021 buildInputs = with self; [];
983 1022 doCheck = false;
984 1023 propagatedBuildInputs = with self; [anyjson amqplib];
985 1024 src = fetchurl {
986 1025 url = "https://pypi.python.org/packages/19/53/74bf2a624644b45f0850a638752514fc10a8e1cbd738f10804951a6df3f5/kombu-1.5.1.tar.gz";
987 1026 md5 = "50662f3c7e9395b3d0721fb75d100b63";
988 1027 };
989 1028 meta = {
990 1029 license = [ pkgs.lib.licenses.bsdOriginal ];
991 1030 };
992 1031 };
993 1032 lxml = super.buildPythonPackage {
994 1033 name = "lxml-3.7.3";
995 1034 buildInputs = with self; [];
996 1035 doCheck = false;
997 1036 propagatedBuildInputs = with self; [];
998 1037 src = fetchurl {
999 1038 url = "https://pypi.python.org/packages/39/e8/a8e0b1fa65dd021d48fe21464f71783655f39a41f218293c1c590d54eb82/lxml-3.7.3.tar.gz";
1000 1039 md5 = "075692ce442e69bbd604d44e21c02753";
1001 1040 };
1002 1041 meta = {
1003 1042 license = [ pkgs.lib.licenses.bsdOriginal ];
1004 1043 };
1005 1044 };
1006 1045 meld3 = super.buildPythonPackage {
1007 1046 name = "meld3-1.0.2";
1008 1047 buildInputs = with self; [];
1009 1048 doCheck = false;
1010 1049 propagatedBuildInputs = with self; [];
1011 1050 src = fetchurl {
1012 1051 url = "https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz";
1013 1052 md5 = "3ccc78cd79cffd63a751ad7684c02c91";
1014 1053 };
1015 1054 meta = {
1016 1055 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1017 1056 };
1018 1057 };
1019 1058 mistune = super.buildPythonPackage {
1020 1059 name = "mistune-0.7.4";
1021 1060 buildInputs = with self; [];
1022 1061 doCheck = false;
1023 1062 propagatedBuildInputs = with self; [];
1024 1063 src = fetchurl {
1025 1064 url = "https://pypi.python.org/packages/25/a4/12a584c0c59c9fed529f8b3c47ca8217c0cf8bcc5e1089d3256410cfbdbc/mistune-0.7.4.tar.gz";
1026 1065 md5 = "92d01cb717e9e74429e9bde9d29ac43b";
1027 1066 };
1028 1067 meta = {
1029 1068 license = [ pkgs.lib.licenses.bsdOriginal ];
1030 1069 };
1031 1070 };
1032 1071 mock = super.buildPythonPackage {
1033 1072 name = "mock-1.0.1";
1034 1073 buildInputs = with self; [];
1035 1074 doCheck = false;
1036 1075 propagatedBuildInputs = with self; [];
1037 1076 src = fetchurl {
1038 1077 url = "https://pypi.python.org/packages/15/45/30273ee91feb60dabb8fbb2da7868520525f02cf910279b3047182feed80/mock-1.0.1.zip";
1039 1078 md5 = "869f08d003c289a97c1a6610faf5e913";
1040 1079 };
1041 1080 meta = {
1042 1081 license = [ pkgs.lib.licenses.bsdOriginal ];
1043 1082 };
1044 1083 };
1045 1084 msgpack-python = super.buildPythonPackage {
1046 1085 name = "msgpack-python-0.4.8";
1047 1086 buildInputs = with self; [];
1048 1087 doCheck = false;
1049 1088 propagatedBuildInputs = with self; [];
1050 1089 src = fetchurl {
1051 1090 url = "https://pypi.python.org/packages/21/27/8a1d82041c7a2a51fcc73675875a5f9ea06c2663e02fcfeb708be1d081a0/msgpack-python-0.4.8.tar.gz";
1052 1091 md5 = "dcd854fb41ee7584ebbf35e049e6be98";
1053 1092 };
1054 1093 meta = {
1055 1094 license = [ pkgs.lib.licenses.asl20 ];
1056 1095 };
1057 1096 };
1058 1097 nbconvert = super.buildPythonPackage {
1059 1098 name = "nbconvert-5.1.1";
1060 1099 buildInputs = with self; [];
1061 1100 doCheck = false;
1062 1101 propagatedBuildInputs = with self; [mistune Jinja2 Pygments traitlets jupyter-core nbformat entrypoints bleach pandocfilters testpath];
1063 1102 src = fetchurl {
1064 1103 url = "https://pypi.python.org/packages/95/58/df1c91f1658ee5df19097f915a1e71c91fc824a708d82d2b2e35f8b80e9a/nbconvert-5.1.1.tar.gz";
1065 1104 md5 = "d0263fb03a44db2f94eea09a608ed813";
1066 1105 };
1067 1106 meta = {
1068 1107 license = [ pkgs.lib.licenses.bsdOriginal ];
1069 1108 };
1070 1109 };
1071 1110 nbformat = super.buildPythonPackage {
1072 1111 name = "nbformat-4.3.0";
1073 1112 buildInputs = with self; [];
1074 1113 doCheck = false;
1075 1114 propagatedBuildInputs = with self; [ipython-genutils traitlets jsonschema jupyter-core];
1076 1115 src = fetchurl {
1077 1116 url = "https://pypi.python.org/packages/f9/c5/89df4abf906f766727f976e170caa85b4f1c1d1feb1f45d716016e68e19f/nbformat-4.3.0.tar.gz";
1078 1117 md5 = "9a00d20425914cd5ba5f97769d9963ca";
1079 1118 };
1080 1119 meta = {
1081 1120 license = [ pkgs.lib.licenses.bsdOriginal ];
1082 1121 };
1083 1122 };
1084 1123 nose = super.buildPythonPackage {
1085 1124 name = "nose-1.3.6";
1086 1125 buildInputs = with self; [];
1087 1126 doCheck = false;
1088 1127 propagatedBuildInputs = with self; [];
1089 1128 src = fetchurl {
1090 1129 url = "https://pypi.python.org/packages/70/c7/469e68148d17a0d3db5ed49150242fd70a74a8147b8f3f8b87776e028d99/nose-1.3.6.tar.gz";
1091 1130 md5 = "0ca546d81ca8309080fc80cb389e7a16";
1092 1131 };
1093 1132 meta = {
1094 1133 license = [ { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "GNU LGPL"; } ];
1095 1134 };
1096 1135 };
1097 1136 objgraph = super.buildPythonPackage {
1098 1137 name = "objgraph-3.1.0";
1099 1138 buildInputs = with self; [];
1100 1139 doCheck = false;
1101 1140 propagatedBuildInputs = with self; [graphviz];
1102 1141 src = fetchurl {
1103 1142 url = "https://pypi.python.org/packages/f4/b3/082e54e62094cb2ec84f8d5a49e0142cef99016491cecba83309cff920ae/objgraph-3.1.0.tar.gz";
1104 1143 md5 = "eddbd96039796bfbd13eee403701e64a";
1105 1144 };
1106 1145 meta = {
1107 1146 license = [ pkgs.lib.licenses.mit ];
1108 1147 };
1109 1148 };
1110 1149 packaging = super.buildPythonPackage {
1111 1150 name = "packaging-15.2";
1112 1151 buildInputs = with self; [];
1113 1152 doCheck = false;
1114 1153 propagatedBuildInputs = with self; [];
1115 1154 src = fetchurl {
1116 1155 url = "https://pypi.python.org/packages/24/c4/185da1304f07047dc9e0c46c31db75c0351bd73458ac3efad7da3dbcfbe1/packaging-15.2.tar.gz";
1117 1156 md5 = "c16093476f6ced42128bf610e5db3784";
1118 1157 };
1119 1158 meta = {
1120 1159 license = [ pkgs.lib.licenses.asl20 ];
1121 1160 };
1122 1161 };
1123 1162 pandocfilters = super.buildPythonPackage {
1124 name = "pandocfilters-1.4.1";
1163 name = "pandocfilters-1.4.2";
1125 1164 buildInputs = with self; [];
1126 1165 doCheck = false;
1127 1166 propagatedBuildInputs = with self; [];
1128 1167 src = fetchurl {
1129 url = "https://pypi.python.org/packages/e3/1f/21d1b7e8ca571e80b796c758d361fdf5554335ff138158654684bc5401d8/pandocfilters-1.4.1.tar.gz";
1130 md5 = "7680d9f9ec07397dd17f380ee3818b9d";
1168 url = "https://pypi.python.org/packages/4c/ea/236e2584af67bb6df960832731a6e5325fd4441de001767da328c33368ce/pandocfilters-1.4.2.tar.gz";
1169 md5 = "dc391791ef54c7de1572d7b46b63361f";
1131 1170 };
1132 1171 meta = {
1133 1172 license = [ pkgs.lib.licenses.bsdOriginal ];
1134 1173 };
1135 1174 };
1136 paramiko = super.buildPythonPackage {
1137 name = "paramiko-1.15.1";
1175 pathlib2 = super.buildPythonPackage {
1176 name = "pathlib2-2.3.0";
1138 1177 buildInputs = with self; [];
1139 1178 doCheck = false;
1140 propagatedBuildInputs = with self; [pycrypto ecdsa];
1179 propagatedBuildInputs = with self; [six scandir];
1141 1180 src = fetchurl {
1142 url = "https://pypi.python.org/packages/04/2b/a22d2a560c1951abbbf95a0628e245945565f70dc082d9e784666887222c/paramiko-1.15.1.tar.gz";
1143 md5 = "48c274c3f9b1282932567b21f6acf3b5";
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";
1181 url = "https://pypi.python.org/packages/a1/14/df0deb867c2733f7d857523c10942b3d6612a1b222502fdffa9439943dfb/pathlib2-2.3.0.tar.gz";
1182 md5 = "89c90409d11fd5947966b6a30a47d18c";
1157 1183 };
1158 1184 meta = {
1159 1185 license = [ pkgs.lib.licenses.mit ];
1160 1186 };
1161 1187 };
1162 1188 peppercorn = super.buildPythonPackage {
1163 1189 name = "peppercorn-0.5";
1164 1190 buildInputs = with self; [];
1165 1191 doCheck = false;
1166 1192 propagatedBuildInputs = with self; [];
1167 1193 src = fetchurl {
1168 1194 url = "https://pypi.python.org/packages/45/ec/a62ec317d1324a01567c5221b420742f094f05ee48097e5157d32be3755c/peppercorn-0.5.tar.gz";
1169 1195 md5 = "f08efbca5790019ab45d76b7244abd40";
1170 1196 };
1171 1197 meta = {
1172 1198 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1173 1199 };
1174 1200 };
1175 1201 pexpect = super.buildPythonPackage {
1176 1202 name = "pexpect-4.2.1";
1177 1203 buildInputs = with self; [];
1178 1204 doCheck = false;
1179 1205 propagatedBuildInputs = with self; [ptyprocess];
1180 1206 src = fetchurl {
1181 1207 url = "https://pypi.python.org/packages/e8/13/d0b0599099d6cd23663043a2a0bb7c61e58c6ba359b2656e6fb000ef5b98/pexpect-4.2.1.tar.gz";
1182 1208 md5 = "3694410001a99dff83f0b500a1ca1c95";
1183 1209 };
1184 1210 meta = {
1185 1211 license = [ pkgs.lib.licenses.isc { fullName = "ISC License (ISCL)"; } ];
1186 1212 };
1187 1213 };
1188 1214 pickleshare = super.buildPythonPackage {
1189 1215 name = "pickleshare-0.7.4";
1190 1216 buildInputs = with self; [];
1191 1217 doCheck = false;
1192 1218 propagatedBuildInputs = with self; [pathlib2];
1193 1219 src = fetchurl {
1194 1220 url = "https://pypi.python.org/packages/69/fe/dd137d84daa0fd13a709e448138e310d9ea93070620c9db5454e234af525/pickleshare-0.7.4.tar.gz";
1195 1221 md5 = "6a9e5dd8dfc023031f6b7b3f824cab12";
1196 1222 };
1197 1223 meta = {
1198 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 1253 prompt-toolkit = super.buildPythonPackage {
1202 name = "prompt-toolkit-1.0.14";
1254 name = "prompt-toolkit-1.0.15";
1203 1255 buildInputs = with self; [];
1204 1256 doCheck = false;
1205 1257 propagatedBuildInputs = with self; [six wcwidth];
1206 1258 src = fetchurl {
1207 url = "https://pypi.python.org/packages/55/56/8c39509b614bda53e638b7500f12577d663ac1b868aef53426fc6a26c3f5/prompt_toolkit-1.0.14.tar.gz";
1208 md5 = "f24061ae133ed32c6b764e92bd48c496";
1259 url = "https://pypi.python.org/packages/8a/ad/cf6b128866e78ad6d7f1dc5b7f99885fb813393d9860778b2984582e81b5/prompt_toolkit-1.0.15.tar.gz";
1260 md5 = "8fe70295006dbc8afedd43e5eba99032";
1209 1261 };
1210 1262 meta = {
1211 1263 license = [ pkgs.lib.licenses.bsdOriginal ];
1212 1264 };
1213 1265 };
1214 1266 psutil = super.buildPythonPackage {
1215 1267 name = "psutil-4.3.1";
1216 1268 buildInputs = with self; [];
1217 1269 doCheck = false;
1218 1270 propagatedBuildInputs = with self; [];
1219 1271 src = fetchurl {
1220 1272 url = "https://pypi.python.org/packages/78/cc/f267a1371f229bf16db6a4e604428c3b032b823b83155bd33cef45e49a53/psutil-4.3.1.tar.gz";
1221 1273 md5 = "199a366dba829c88bddaf5b41d19ddc0";
1222 1274 };
1223 1275 meta = {
1224 1276 license = [ pkgs.lib.licenses.bsdOriginal ];
1225 1277 };
1226 1278 };
1227 1279 psycopg2 = super.buildPythonPackage {
1228 name = "psycopg2-2.6.1";
1280 name = "psycopg2-2.7.1";
1229 1281 buildInputs = with self; [];
1230 1282 doCheck = false;
1231 1283 propagatedBuildInputs = with self; [];
1232 1284 src = fetchurl {
1233 url = "https://pypi.python.org/packages/86/fd/cc8315be63a41fe000cce20482a917e874cdc1151e62cb0141f5e55f711e/psycopg2-2.6.1.tar.gz";
1234 md5 = "842b44f8c95517ed5b792081a2370da1";
1285 url = "https://pypi.python.org/packages/f8/e9/5793369ce8a41bf5467623ded8d59a434dfef9c136351aca4e70c2657ba0/psycopg2-2.7.1.tar.gz";
1286 md5 = "67848ac33af88336046802f6ef7081f3";
1235 1287 };
1236 1288 meta = {
1237 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 1292 ptyprocess = super.buildPythonPackage {
1241 name = "ptyprocess-0.5.1";
1293 name = "ptyprocess-0.5.2";
1242 1294 buildInputs = with self; [];
1243 1295 doCheck = false;
1244 1296 propagatedBuildInputs = with self; [];
1245 1297 src = fetchurl {
1246 url = "https://pypi.python.org/packages/db/d7/b465161910f3d1cef593c5e002bff67e0384898f597f1a7fdc8db4c02bf6/ptyprocess-0.5.1.tar.gz";
1247 md5 = "94e537122914cc9ec9c1eadcd36e73a1";
1298 url = "https://pypi.python.org/packages/51/83/5d07dc35534640b06f9d9f1a1d2bc2513fb9cc7595a1b0e28ae5477056ce/ptyprocess-0.5.2.tar.gz";
1299 md5 = "d3b8febae1b8c53b054bd818d0bb8665";
1248 1300 };
1249 1301 meta = {
1250 1302 license = [ ];
1251 1303 };
1252 1304 };
1253 1305 py = super.buildPythonPackage {
1254 name = "py-1.4.31";
1306 name = "py-1.4.34";
1255 1307 buildInputs = with self; [];
1256 1308 doCheck = false;
1257 1309 propagatedBuildInputs = with self; [];
1258 1310 src = fetchurl {
1259 url = "https://pypi.python.org/packages/f4/9a/8dfda23f36600dd701c6722316ba8a3ab4b990261f83e7d3ffc6dfedf7ef/py-1.4.31.tar.gz";
1260 md5 = "5d2c63c56dc3f2115ec35c066ecd582b";
1311 url = "https://pypi.python.org/packages/68/35/58572278f1c097b403879c1e9369069633d1cbad5239b9057944bb764782/py-1.4.34.tar.gz";
1312 md5 = "d9c3d8f734b0819ff48e355d77bf1730";
1261 1313 };
1262 1314 meta = {
1263 1315 license = [ pkgs.lib.licenses.mit ];
1264 1316 };
1265 1317 };
1266 1318 py-bcrypt = super.buildPythonPackage {
1267 1319 name = "py-bcrypt-0.4";
1268 1320 buildInputs = with self; [];
1269 1321 doCheck = false;
1270 1322 propagatedBuildInputs = with self; [];
1271 1323 src = fetchurl {
1272 1324 url = "https://pypi.python.org/packages/68/b1/1c3068c5c4d2e35c48b38dcc865301ebfdf45f54507086ac65ced1fd3b3d/py-bcrypt-0.4.tar.gz";
1273 1325 md5 = "dd8b367d6b716a2ea2e72392525f4e36";
1274 1326 };
1275 1327 meta = {
1276 1328 license = [ pkgs.lib.licenses.bsdOriginal ];
1277 1329 };
1278 1330 };
1279 1331 py-gfm = super.buildPythonPackage {
1280 1332 name = "py-gfm-0.1.3";
1281 1333 buildInputs = with self; [];
1282 1334 doCheck = false;
1283 1335 propagatedBuildInputs = with self; [setuptools Markdown];
1284 1336 src = fetchurl {
1285 1337 url = "https://code.rhodecode.com/upstream/py-gfm/archive/0d66a19bc16e3d49de273c0f797d4e4781e8c0f2.tar.gz?md5=0d0d5385bfb629eea636a80b9c2bfd16";
1286 1338 md5 = "0d0d5385bfb629eea636a80b9c2bfd16";
1287 1339 };
1288 1340 meta = {
1289 1341 license = [ pkgs.lib.licenses.bsdOriginal ];
1290 1342 };
1291 1343 };
1292 1344 pycrypto = super.buildPythonPackage {
1293 1345 name = "pycrypto-2.6.1";
1294 1346 buildInputs = with self; [];
1295 1347 doCheck = false;
1296 1348 propagatedBuildInputs = with self; [];
1297 1349 src = fetchurl {
1298 1350 url = "https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz";
1299 1351 md5 = "55a61a054aa66812daf5161a0d5d7eda";
1300 1352 };
1301 1353 meta = {
1302 1354 license = [ pkgs.lib.licenses.publicDomain ];
1303 1355 };
1304 1356 };
1305 1357 pycurl = super.buildPythonPackage {
1306 1358 name = "pycurl-7.19.5";
1307 1359 buildInputs = with self; [];
1308 1360 doCheck = false;
1309 1361 propagatedBuildInputs = with self; [];
1310 1362 src = fetchurl {
1311 1363 url = "https://pypi.python.org/packages/6c/48/13bad289ef6f4869b1d8fc11ae54de8cfb3cc4a2eb9f7419c506f763be46/pycurl-7.19.5.tar.gz";
1312 1364 md5 = "47b4eac84118e2606658122104e62072";
1313 1365 };
1314 1366 meta = {
1315 1367 license = [ pkgs.lib.licenses.mit { fullName = "LGPL/MIT"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1316 1368 };
1317 1369 };
1318 1370 pyflakes = super.buildPythonPackage {
1319 1371 name = "pyflakes-0.8.1";
1320 1372 buildInputs = with self; [];
1321 1373 doCheck = false;
1322 1374 propagatedBuildInputs = with self; [];
1323 1375 src = fetchurl {
1324 1376 url = "https://pypi.python.org/packages/75/22/a90ec0252f4f87f3ffb6336504de71fe16a49d69c4538dae2f12b9360a38/pyflakes-0.8.1.tar.gz";
1325 1377 md5 = "905fe91ad14b912807e8fdc2ac2e2c23";
1326 1378 };
1327 1379 meta = {
1328 1380 license = [ pkgs.lib.licenses.mit ];
1329 1381 };
1330 1382 };
1331 1383 pygments-markdown-lexer = super.buildPythonPackage {
1332 1384 name = "pygments-markdown-lexer-0.1.0.dev39";
1333 1385 buildInputs = with self; [];
1334 1386 doCheck = false;
1335 1387 propagatedBuildInputs = with self; [Pygments];
1336 1388 src = fetchurl {
1337 1389 url = "https://pypi.python.org/packages/c3/12/674cdee66635d638cedb2c5d9c85ce507b7b2f91bdba29e482f1b1160ff6/pygments-markdown-lexer-0.1.0.dev39.zip";
1338 1390 md5 = "6360fe0f6d1f896e35b7a0142ce6459c";
1339 1391 };
1340 1392 meta = {
1341 1393 license = [ pkgs.lib.licenses.asl20 ];
1342 1394 };
1343 1395 };
1344 1396 pyparsing = super.buildPythonPackage {
1345 1397 name = "pyparsing-1.5.7";
1346 1398 buildInputs = with self; [];
1347 1399 doCheck = false;
1348 1400 propagatedBuildInputs = with self; [];
1349 1401 src = fetchurl {
1350 1402 url = "https://pypi.python.org/packages/2e/26/e8fb5b4256a5f5036be7ce115ef8db8d06bc537becfbdc46c6af008314ee/pyparsing-1.5.7.zip";
1351 1403 md5 = "b86854857a368d6ccb4d5b6e76d0637f";
1352 1404 };
1353 1405 meta = {
1354 1406 license = [ pkgs.lib.licenses.mit ];
1355 1407 };
1356 1408 };
1357 1409 pyramid = super.buildPythonPackage {
1358 name = "pyramid-1.7.4";
1410 name = "pyramid-1.9.1";
1359 1411 buildInputs = with self; [];
1360 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 1414 src = fetchurl {
1363 url = "https://pypi.python.org/packages/33/91/55f5c661f8923902cd1f68d75f2b937c45e7682857356cf18f0be5493899/pyramid-1.7.4.tar.gz";
1364 md5 = "6ef1dfdcff9136d04490410757c4c446";
1415 url = "https://pypi.python.org/packages/9a/57/73447be9e7d0512d601e3f0a1fb9d7d1efb941911f49efdfe036d2826507/pyramid-1.9.1.tar.gz";
1416 md5 = "0163e19c58c2d12976a3b6fdb57e052d";
1365 1417 };
1366 1418 meta = {
1367 1419 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1368 1420 };
1369 1421 };
1370 1422 pyramid-beaker = super.buildPythonPackage {
1371 1423 name = "pyramid-beaker-0.8";
1372 1424 buildInputs = with self; [];
1373 1425 doCheck = false;
1374 1426 propagatedBuildInputs = with self; [pyramid Beaker];
1375 1427 src = fetchurl {
1376 1428 url = "https://pypi.python.org/packages/d9/6e/b85426e00fd3d57f4545f74e1c3828552d8700f13ededeef9233f7bca8be/pyramid_beaker-0.8.tar.gz";
1377 1429 md5 = "22f14be31b06549f80890e2c63a93834";
1378 1430 };
1379 1431 meta = {
1380 1432 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1381 1433 };
1382 1434 };
1383 1435 pyramid-debugtoolbar = super.buildPythonPackage {
1384 name = "pyramid-debugtoolbar-3.0.5";
1436 name = "pyramid-debugtoolbar-4.2.1";
1385 1437 buildInputs = with self; [];
1386 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 1440 src = fetchurl {
1389 url = "https://pypi.python.org/packages/64/0e/df00bfb55605900e7a2f7e4a18dd83575a6651688e297d5a0aa4c208fd7d/pyramid_debugtoolbar-3.0.5.tar.gz";
1390 md5 = "aebab8c3bfdc6f89e4d3adc1d126538e";
1441 url = "https://pypi.python.org/packages/db/26/94620b7752936e2cd74838263ff366db9b454f7394bfb62d1eb2f84b29c1/pyramid_debugtoolbar-4.2.1.tar.gz";
1442 md5 = "3dfaced2fab1644ff5284017be9d92b9";
1391 1443 };
1392 1444 meta = {
1393 1445 license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ];
1394 1446 };
1395 1447 };
1396 1448 pyramid-jinja2 = super.buildPythonPackage {
1397 1449 name = "pyramid-jinja2-2.5";
1398 1450 buildInputs = with self; [];
1399 1451 doCheck = false;
1400 1452 propagatedBuildInputs = with self; [pyramid zope.deprecation Jinja2 MarkupSafe];
1401 1453 src = fetchurl {
1402 1454 url = "https://pypi.python.org/packages/a1/80/595e26ffab7deba7208676b6936b7e5a721875710f982e59899013cae1ed/pyramid_jinja2-2.5.tar.gz";
1403 1455 md5 = "07cb6547204ac5e6f0b22a954ccee928";
1404 1456 };
1405 1457 meta = {
1406 1458 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1407 1459 };
1408 1460 };
1409 1461 pyramid-mako = super.buildPythonPackage {
1410 1462 name = "pyramid-mako-1.0.2";
1411 1463 buildInputs = with self; [];
1412 1464 doCheck = false;
1413 1465 propagatedBuildInputs = with self; [pyramid Mako];
1414 1466 src = fetchurl {
1415 1467 url = "https://pypi.python.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
1416 1468 md5 = "ee25343a97eb76bd90abdc2a774eb48a";
1417 1469 };
1418 1470 meta = {
1419 1471 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1420 1472 };
1421 1473 };
1422 1474 pysqlite = super.buildPythonPackage {
1423 name = "pysqlite-2.6.3";
1475 name = "pysqlite-2.8.3";
1424 1476 buildInputs = with self; [];
1425 1477 doCheck = false;
1426 1478 propagatedBuildInputs = with self; [];
1427 1479 src = fetchurl {
1428 url = "https://pypi.python.org/packages/5c/a6/1c429cd4c8069cf4bfbd0eb4d592b3f4042155a8202df83d7e9b93aa3dc2/pysqlite-2.6.3.tar.gz";
1429 md5 = "7ff1cedee74646b50117acff87aa1cfa";
1480 url = "https://pypi.python.org/packages/42/02/981b6703e3c83c5b25a829c6e77aad059f9481b0bbacb47e6e8ca12bd731/pysqlite-2.8.3.tar.gz";
1481 md5 = "033f17b8644577715aee55e8832ac9fc";
1430 1482 };
1431 1483 meta = {
1432 1484 license = [ { fullName = "zlib/libpng License"; } { fullName = "zlib/libpng license"; } ];
1433 1485 };
1434 1486 };
1435 1487 pytest = super.buildPythonPackage {
1436 name = "pytest-3.0.5";
1488 name = "pytest-3.1.2";
1437 1489 buildInputs = with self; [];
1438 1490 doCheck = false;
1439 propagatedBuildInputs = with self; [py];
1491 propagatedBuildInputs = with self; [py setuptools];
1440 1492 src = fetchurl {
1441 url = "https://pypi.python.org/packages/a8/87/b7ca49efe52d2b4169f2bfc49aa5e384173c4619ea8e635f123a0dac5b75/pytest-3.0.5.tar.gz";
1442 md5 = "cefd527b59332688bf5db4a10aa8a7cb";
1493 url = "https://pypi.python.org/packages/72/2b/2d3155e01f45a5a04427857352ee88220ee39550b2bc078f9db3190aea46/pytest-3.1.2.tar.gz";
1494 md5 = "c4d179f89043cc925e1c169d03128e02";
1443 1495 };
1444 1496 meta = {
1445 1497 license = [ pkgs.lib.licenses.mit ];
1446 1498 };
1447 1499 };
1448 1500 pytest-catchlog = super.buildPythonPackage {
1449 1501 name = "pytest-catchlog-1.2.2";
1450 1502 buildInputs = with self; [];
1451 1503 doCheck = false;
1452 1504 propagatedBuildInputs = with self; [py pytest];
1453 1505 src = fetchurl {
1454 1506 url = "https://pypi.python.org/packages/f2/2b/2faccdb1a978fab9dd0bf31cca9f6847fbe9184a0bdcc3011ac41dd44191/pytest-catchlog-1.2.2.zip";
1455 1507 md5 = "09d890c54c7456c818102b7ff8c182c8";
1456 1508 };
1457 1509 meta = {
1458 1510 license = [ pkgs.lib.licenses.mit ];
1459 1511 };
1460 1512 };
1461 1513 pytest-cov = super.buildPythonPackage {
1462 name = "pytest-cov-2.4.0";
1514 name = "pytest-cov-2.5.1";
1463 1515 buildInputs = with self; [];
1464 1516 doCheck = false;
1465 1517 propagatedBuildInputs = with self; [pytest coverage];
1466 1518 src = fetchurl {
1467 url = "https://pypi.python.org/packages/00/c0/2bfd1fcdb9d407b8ac8185b1cb5ff458105c6b207a9a7f0e13032de9828f/pytest-cov-2.4.0.tar.gz";
1468 md5 = "2fda09677d232acc99ec1b3c5831e33f";
1519 url = "https://pypi.python.org/packages/24/b4/7290d65b2f3633db51393bdf8ae66309b37620bc3ec116c5e357e3e37238/pytest-cov-2.5.1.tar.gz";
1520 md5 = "5acf38d4909e19819eb5c1754fbfc0ac";
1469 1521 };
1470 1522 meta = {
1471 1523 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.mit ];
1472 1524 };
1473 1525 };
1474 1526 pytest-profiling = super.buildPythonPackage {
1475 name = "pytest-profiling-1.2.2";
1527 name = "pytest-profiling-1.2.6";
1476 1528 buildInputs = with self; [];
1477 1529 doCheck = false;
1478 1530 propagatedBuildInputs = with self; [six pytest gprof2dot];
1479 1531 src = fetchurl {
1480 url = "https://pypi.python.org/packages/73/e8/804681323bac0bc45c520ec34185ba8469008942266d0074699b204835c1/pytest-profiling-1.2.2.tar.gz";
1481 md5 = "0a16d7dda2d23b91e9730fa4558cf728";
1532 url = "https://pypi.python.org/packages/f9/0d/df67fb9ce16c2cef201693da956321b1bccfbf9a4ead39748b9f9d1d74cb/pytest-profiling-1.2.6.tar.gz";
1533 md5 = "50eb4c66c3762a2f1a49669bedc0b894";
1482 1534 };
1483 1535 meta = {
1484 1536 license = [ pkgs.lib.licenses.mit ];
1485 1537 };
1486 1538 };
1487 1539 pytest-runner = super.buildPythonPackage {
1488 name = "pytest-runner-2.9";
1540 name = "pytest-runner-2.11.1";
1489 1541 buildInputs = with self; [];
1490 1542 doCheck = false;
1491 1543 propagatedBuildInputs = with self; [];
1492 1544 src = fetchurl {
1493 url = "https://pypi.python.org/packages/11/d4/c335ddf94463e451109e3494e909765c3e5205787b772e3b25ee8601b86a/pytest-runner-2.9.tar.gz";
1494 md5 = "2212a2e34404b0960b2fdc2c469247b2";
1545 url = "https://pypi.python.org/packages/9e/4d/08889e5e27a9f5d6096b9ad257f4dea1faabb03c5ded8f665ead448f5d8a/pytest-runner-2.11.1.tar.gz";
1546 md5 = "bdb73eb18eca2727944a2dcf963c5a81";
1495 1547 };
1496 1548 meta = {
1497 1549 license = [ pkgs.lib.licenses.mit ];
1498 1550 };
1499 1551 };
1500 1552 pytest-sugar = super.buildPythonPackage {
1501 name = "pytest-sugar-0.7.1";
1553 name = "pytest-sugar-0.8.0";
1502 1554 buildInputs = with self; [];
1503 1555 doCheck = false;
1504 1556 propagatedBuildInputs = with self; [pytest termcolor];
1505 1557 src = fetchurl {
1506 url = "https://pypi.python.org/packages/03/97/05d988b4fa870e7373e8ee4582408543b9ca2bd35c3c67b569369c6f9c49/pytest-sugar-0.7.1.tar.gz";
1507 md5 = "7400f7c11f3d572b2c2a3b60352d35fe";
1558 url = "https://pypi.python.org/packages/a5/b0/b2773dee078f17773a5bf2dfad49b0be57b6354bbd84bbefe4313e509d87/pytest-sugar-0.8.0.tar.gz";
1559 md5 = "8cafbdad648068e0e44b8fc5f9faae42";
1508 1560 };
1509 1561 meta = {
1510 1562 license = [ pkgs.lib.licenses.bsdOriginal ];
1511 1563 };
1512 1564 };
1513 1565 pytest-timeout = super.buildPythonPackage {
1514 1566 name = "pytest-timeout-1.2.0";
1515 1567 buildInputs = with self; [];
1516 1568 doCheck = false;
1517 1569 propagatedBuildInputs = with self; [pytest];
1518 1570 src = fetchurl {
1519 1571 url = "https://pypi.python.org/packages/cc/b7/b2a61365ea6b6d2e8881360ae7ed8dad0327ad2df89f2f0be4a02304deb2/pytest-timeout-1.2.0.tar.gz";
1520 1572 md5 = "83607d91aa163562c7ee835da57d061d";
1521 1573 };
1522 1574 meta = {
1523 1575 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
1524 1576 };
1525 1577 };
1526 1578 python-dateutil = super.buildPythonPackage {
1527 1579 name = "python-dateutil-2.1";
1528 1580 buildInputs = with self; [];
1529 1581 doCheck = false;
1530 1582 propagatedBuildInputs = with self; [six];
1531 1583 src = fetchurl {
1532 1584 url = "https://pypi.python.org/packages/65/52/9c18dac21f174ad31b65e22d24297864a954e6fe65876eba3f5773d2da43/python-dateutil-2.1.tar.gz";
1533 1585 md5 = "1534bb15cf311f07afaa3aacba1c028b";
1534 1586 };
1535 1587 meta = {
1536 1588 license = [ { fullName = "Simplified BSD"; } ];
1537 1589 };
1538 1590 };
1539 1591 python-editor = super.buildPythonPackage {
1540 1592 name = "python-editor-1.0.3";
1541 1593 buildInputs = with self; [];
1542 1594 doCheck = false;
1543 1595 propagatedBuildInputs = with self; [];
1544 1596 src = fetchurl {
1545 1597 url = "https://pypi.python.org/packages/65/1e/adf6e000ea5dc909aa420352d6ba37f16434c8a3c2fa030445411a1ed545/python-editor-1.0.3.tar.gz";
1546 1598 md5 = "0aca5f2ef176ce68e98a5b7e31372835";
1547 1599 };
1548 1600 meta = {
1549 1601 license = [ pkgs.lib.licenses.asl20 { fullName = "Apache"; } ];
1550 1602 };
1551 1603 };
1552 1604 python-ldap = super.buildPythonPackage {
1553 name = "python-ldap-2.4.19";
1605 name = "python-ldap-2.4.40";
1554 1606 buildInputs = with self; [];
1555 1607 doCheck = false;
1556 1608 propagatedBuildInputs = with self; [setuptools];
1557 1609 src = fetchurl {
1558 url = "https://pypi.python.org/packages/42/81/1b64838c82e64f14d4e246ff00b52e650a35c012551b891ada2b85d40737/python-ldap-2.4.19.tar.gz";
1559 md5 = "b941bf31d09739492aa19ef679e94ae3";
1610 url = "https://pypi.python.org/packages/4a/d8/7d70a7469058a3987d224061a81d778951ac2b48220bdcc511e4b1b37176/python-ldap-2.4.40.tar.gz";
1611 md5 = "aea0233f7d39b0c7549fcd310deeb0e5";
1560 1612 };
1561 1613 meta = {
1562 1614 license = [ pkgs.lib.licenses.psfl ];
1563 1615 };
1564 1616 };
1565 1617 python-memcached = super.buildPythonPackage {
1566 name = "python-memcached-1.57";
1618 name = "python-memcached-1.58";
1567 1619 buildInputs = with self; [];
1568 1620 doCheck = false;
1569 1621 propagatedBuildInputs = with self; [six];
1570 1622 src = fetchurl {
1571 url = "https://pypi.python.org/packages/52/9d/eebc0dcbc5c7c66840ad207dfc1baa376dadb74912484bff73819cce01e6/python-memcached-1.57.tar.gz";
1572 md5 = "de21f64b42b2d961f3d4ad7beb5468a1";
1623 url = "https://pypi.python.org/packages/f7/62/14b2448cfb04427366f24104c9da97cf8ea380d7258a3233f066a951a8d8/python-memcached-1.58.tar.gz";
1624 md5 = "23b258105013d14d899828d334e6b044";
1573 1625 };
1574 1626 meta = {
1575 1627 license = [ pkgs.lib.licenses.psfl ];
1576 1628 };
1577 1629 };
1578 1630 python-pam = super.buildPythonPackage {
1579 1631 name = "python-pam-1.8.2";
1580 1632 buildInputs = with self; [];
1581 1633 doCheck = false;
1582 1634 propagatedBuildInputs = with self; [];
1583 1635 src = fetchurl {
1584 1636 url = "https://pypi.python.org/packages/de/8c/f8f5d38b4f26893af267ea0b39023d4951705ab0413a39e0cf7cf4900505/python-pam-1.8.2.tar.gz";
1585 1637 md5 = "db71b6b999246fb05d78ecfbe166629d";
1586 1638 };
1587 1639 meta = {
1588 1640 license = [ { fullName = "License :: OSI Approved :: MIT License"; } pkgs.lib.licenses.mit ];
1589 1641 };
1590 1642 };
1591 1643 pytz = super.buildPythonPackage {
1592 1644 name = "pytz-2015.4";
1593 1645 buildInputs = with self; [];
1594 1646 doCheck = false;
1595 1647 propagatedBuildInputs = with self; [];
1596 1648 src = fetchurl {
1597 1649 url = "https://pypi.python.org/packages/7e/1a/f43b5c92df7b156822030fed151327ea096bcf417e45acc23bd1df43472f/pytz-2015.4.zip";
1598 1650 md5 = "233f2a2b370d03f9b5911700cc9ebf3c";
1599 1651 };
1600 1652 meta = {
1601 1653 license = [ pkgs.lib.licenses.mit ];
1602 1654 };
1603 1655 };
1604 1656 pyzmq = super.buildPythonPackage {
1605 1657 name = "pyzmq-14.6.0";
1606 1658 buildInputs = with self; [];
1607 1659 doCheck = false;
1608 1660 propagatedBuildInputs = with self; [];
1609 1661 src = fetchurl {
1610 1662 url = "https://pypi.python.org/packages/8a/3b/5463d5a9d712cd8bbdac335daece0d69f6a6792da4e3dd89956c0db4e4e6/pyzmq-14.6.0.tar.gz";
1611 1663 md5 = "395b5de95a931afa5b14c9349a5b8024";
1612 1664 };
1613 1665 meta = {
1614 1666 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "LGPL+BSD"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1615 1667 };
1616 1668 };
1617 1669 recaptcha-client = super.buildPythonPackage {
1618 1670 name = "recaptcha-client-1.0.6";
1619 1671 buildInputs = with self; [];
1620 1672 doCheck = false;
1621 1673 propagatedBuildInputs = with self; [];
1622 1674 src = fetchurl {
1623 1675 url = "https://pypi.python.org/packages/0a/ea/5f2fbbfd894bdac1c68ef8d92019066cfcf9fbff5fe3d728d2b5c25c8db4/recaptcha-client-1.0.6.tar.gz";
1624 1676 md5 = "74228180f7e1fb76c4d7089160b0d919";
1625 1677 };
1626 1678 meta = {
1627 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 1695 repoze.lru = super.buildPythonPackage {
1631 1696 name = "repoze.lru-0.6";
1632 1697 buildInputs = with self; [];
1633 1698 doCheck = false;
1634 1699 propagatedBuildInputs = with self; [];
1635 1700 src = fetchurl {
1636 1701 url = "https://pypi.python.org/packages/6e/1e/aa15cc90217e086dc8769872c8778b409812ff036bf021b15795638939e4/repoze.lru-0.6.tar.gz";
1637 1702 md5 = "2c3b64b17a8e18b405f55d46173e14dd";
1638 1703 };
1639 1704 meta = {
1640 1705 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1641 1706 };
1642 1707 };
1643 1708 requests = super.buildPythonPackage {
1644 1709 name = "requests-2.9.1";
1645 1710 buildInputs = with self; [];
1646 1711 doCheck = false;
1647 1712 propagatedBuildInputs = with self; [];
1648 1713 src = fetchurl {
1649 1714 url = "https://pypi.python.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz";
1650 1715 md5 = "0b7f480d19012ec52bab78292efd976d";
1651 1716 };
1652 1717 meta = {
1653 1718 license = [ pkgs.lib.licenses.asl20 ];
1654 1719 };
1655 1720 };
1656 1721 rhodecode-enterprise-ce = super.buildPythonPackage {
1657 name = "rhodecode-enterprise-ce-4.9.1";
1722 name = "rhodecode-enterprise-ce-4.10.0";
1658 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 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 1726 src = ./.;
1662 1727 meta = {
1663 1728 license = [ { fullName = "Affero GNU General Public License v3 or later (AGPLv3+)"; } { fullName = "AGPLv3, and Commercial License"; } ];
1664 1729 };
1665 1730 };
1666 1731 rhodecode-tools = super.buildPythonPackage {
1667 name = "rhodecode-tools-0.12.0";
1732 name = "rhodecode-tools-0.13.0";
1668 1733 buildInputs = with self; [];
1669 1734 doCheck = false;
1670 1735 propagatedBuildInputs = with self; [click future six Mako MarkupSafe requests elasticsearch elasticsearch-dsl urllib3 Whoosh];
1671 1736 src = fetchurl {
1672 url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.12.0.tar.gz?md5=9ca040356fa7e38d3f64529a4cffdca4";
1673 md5 = "9ca040356fa7e38d3f64529a4cffdca4";
1737 url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.13.0.tar.gz?md5=f937b0cb34d0779103895a5ec5689ee4";
1738 md5 = "f937b0cb34d0779103895a5ec5689ee4";
1674 1739 };
1675 1740 meta = {
1676 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 1757 setproctitle = super.buildPythonPackage {
1680 1758 name = "setproctitle-1.1.8";
1681 1759 buildInputs = with self; [];
1682 1760 doCheck = false;
1683 1761 propagatedBuildInputs = with self; [];
1684 1762 src = fetchurl {
1685 1763 url = "https://pypi.python.org/packages/33/c3/ad367a4f4f1ca90468863ae727ac62f6edb558fc09a003d344a02cfc6ea6/setproctitle-1.1.8.tar.gz";
1686 1764 md5 = "728f4c8c6031bbe56083a48594027edd";
1687 1765 };
1688 1766 meta = {
1689 1767 license = [ pkgs.lib.licenses.bsdOriginal ];
1690 1768 };
1691 1769 };
1692 1770 setuptools = super.buildPythonPackage {
1693 1771 name = "setuptools-30.1.0";
1694 1772 buildInputs = with self; [];
1695 1773 doCheck = false;
1696 1774 propagatedBuildInputs = with self; [];
1697 1775 src = fetchurl {
1698 1776 url = "https://pypi.python.org/packages/1e/43/002c8616db9a3e7be23c2556e39b90a32bb40ba0dc652de1999d5334d372/setuptools-30.1.0.tar.gz";
1699 1777 md5 = "cac497f42e5096ac8df29e38d3f81c3e";
1700 1778 };
1701 1779 meta = {
1702 1780 license = [ pkgs.lib.licenses.mit ];
1703 1781 };
1704 1782 };
1705 1783 setuptools-scm = super.buildPythonPackage {
1706 1784 name = "setuptools-scm-1.15.0";
1707 1785 buildInputs = with self; [];
1708 1786 doCheck = false;
1709 1787 propagatedBuildInputs = with self; [];
1710 1788 src = fetchurl {
1711 1789 url = "https://pypi.python.org/packages/80/b7/31b6ae5fcb188e37f7e31abe75f9be90490a5456a72860fa6e643f8a3cbc/setuptools_scm-1.15.0.tar.gz";
1712 1790 md5 = "b6916c78ed6253d6602444fad4279c5b";
1713 1791 };
1714 1792 meta = {
1715 1793 license = [ pkgs.lib.licenses.mit ];
1716 1794 };
1717 1795 };
1718 1796 simplegeneric = super.buildPythonPackage {
1719 1797 name = "simplegeneric-0.8.1";
1720 1798 buildInputs = with self; [];
1721 1799 doCheck = false;
1722 1800 propagatedBuildInputs = with self; [];
1723 1801 src = fetchurl {
1724 1802 url = "https://pypi.python.org/packages/3d/57/4d9c9e3ae9a255cd4e1106bb57e24056d3d0709fc01b2e3e345898e49d5b/simplegeneric-0.8.1.zip";
1725 1803 md5 = "f9c1fab00fd981be588fc32759f474e3";
1726 1804 };
1727 1805 meta = {
1728 1806 license = [ pkgs.lib.licenses.zpt21 ];
1729 1807 };
1730 1808 };
1731 1809 simplejson = super.buildPythonPackage {
1732 name = "simplejson-3.7.2";
1810 name = "simplejson-3.11.1";
1733 1811 buildInputs = with self; [];
1734 1812 doCheck = false;
1735 1813 propagatedBuildInputs = with self; [];
1736 1814 src = fetchurl {
1737 url = "https://pypi.python.org/packages/6d/89/7f13f099344eea9d6722779a1f165087cb559598107844b1ac5dbd831fb1/simplejson-3.7.2.tar.gz";
1738 md5 = "a5fc7d05d4cb38492285553def5d4b46";
1815 url = "https://pypi.python.org/packages/08/48/c97b668d6da7d7bebe7ea1817a6f76394b0ec959cb04214ca833c34359df/simplejson-3.11.1.tar.gz";
1816 md5 = "6e2f1bd5fb0a926facf5d89d217a7183";
1739 1817 };
1740 1818 meta = {
1741 1819 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
1742 1820 };
1743 1821 };
1744 1822 six = super.buildPythonPackage {
1745 1823 name = "six-1.9.0";
1746 1824 buildInputs = with self; [];
1747 1825 doCheck = false;
1748 1826 propagatedBuildInputs = with self; [];
1749 1827 src = fetchurl {
1750 1828 url = "https://pypi.python.org/packages/16/64/1dc5e5976b17466fd7d712e59cbe9fb1e18bec153109e5ba3ed6c9102f1a/six-1.9.0.tar.gz";
1751 1829 md5 = "476881ef4012262dfc8adc645ee786c4";
1752 1830 };
1753 1831 meta = {
1754 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 1848 subprocess32 = super.buildPythonPackage {
1758 name = "subprocess32-3.2.6";
1849 name = "subprocess32-3.2.7";
1759 1850 buildInputs = with self; [];
1760 1851 doCheck = false;
1761 1852 propagatedBuildInputs = with self; [];
1762 1853 src = fetchurl {
1763 url = "https://pypi.python.org/packages/28/8d/33ccbff51053f59ae6c357310cac0e79246bbed1d345ecc6188b176d72c3/subprocess32-3.2.6.tar.gz";
1764 md5 = "754c5ab9f533e764f931136974b618f1";
1854 url = "https://pypi.python.org/packages/b8/2f/49e53b0d0e94611a2dc624a1ad24d41b6d94d0f1b0a078443407ea2214c2/subprocess32-3.2.7.tar.gz";
1855 md5 = "824c801e479d3e916879aae3e9c15e16";
1765 1856 };
1766 1857 meta = {
1767 1858 license = [ pkgs.lib.licenses.psfl ];
1768 1859 };
1769 1860 };
1770 1861 supervisor = super.buildPythonPackage {
1771 name = "supervisor-3.3.1";
1862 name = "supervisor-3.3.3";
1772 1863 buildInputs = with self; [];
1773 1864 doCheck = false;
1774 1865 propagatedBuildInputs = with self; [meld3];
1775 1866 src = fetchurl {
1776 url = "https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz";
1777 md5 = "202f760f9bf4930ec06557bac73e5cf2";
1867 url = "https://pypi.python.org/packages/31/7e/788fc6566211e77c395ea272058eb71299c65cc5e55b6214d479c6c2ec9a/supervisor-3.3.3.tar.gz";
1868 md5 = "0fe86dfec4e5c5d98324d24c4cf944bd";
1778 1869 };
1779 1870 meta = {
1780 1871 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1781 1872 };
1782 1873 };
1783 1874 termcolor = super.buildPythonPackage {
1784 1875 name = "termcolor-1.1.0";
1785 1876 buildInputs = with self; [];
1786 1877 doCheck = false;
1787 1878 propagatedBuildInputs = with self; [];
1788 1879 src = fetchurl {
1789 1880 url = "https://pypi.python.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz";
1790 1881 md5 = "043e89644f8909d462fbbfa511c768df";
1791 1882 };
1792 1883 meta = {
1793 1884 license = [ pkgs.lib.licenses.mit ];
1794 1885 };
1795 1886 };
1796 1887 testpath = super.buildPythonPackage {
1797 name = "testpath-0.1";
1888 name = "testpath-0.3.1";
1798 1889 buildInputs = with self; [];
1799 1890 doCheck = false;
1800 1891 propagatedBuildInputs = with self; [];
1801 1892 src = fetchurl {
1802 url = "https://pypi.python.org/packages/f9/c4/c0b22f35138bc26a6058c39cb61db1e8977e5e9550b12cd2cb02ef56fc51/testpath-0.1.tar.gz";
1803 md5 = "401918bcd0b0e5b71a9b909835117bc6";
1893 url = "https://pypi.python.org/packages/f4/8b/b71e9ee10e5f751e9d959bc750ab122ba04187f5aa52aabdc4e63b0e31a7/testpath-0.3.1.tar.gz";
1894 md5 = "2cd5ed5522fda781bb497c9d80ae2fc9";
1804 1895 };
1805 1896 meta = {
1806 1897 license = [ pkgs.lib.licenses.mit ];
1807 1898 };
1808 1899 };
1809 1900 traitlets = super.buildPythonPackage {
1810 1901 name = "traitlets-4.3.2";
1811 1902 buildInputs = with self; [];
1812 1903 doCheck = false;
1813 1904 propagatedBuildInputs = with self; [ipython-genutils six decorator enum34];
1814 1905 src = fetchurl {
1815 1906 url = "https://pypi.python.org/packages/a5/98/7f5ef2fe9e9e071813aaf9cb91d1a732e0a68b6c44a32b38cb8e14c3f069/traitlets-4.3.2.tar.gz";
1816 1907 md5 = "3068663f2f38fd939a9eb3a500ccc154";
1817 1908 };
1818 1909 meta = {
1819 1910 license = [ pkgs.lib.licenses.bsdOriginal ];
1820 1911 };
1821 1912 };
1822 1913 transifex-client = super.buildPythonPackage {
1823 1914 name = "transifex-client-0.10";
1824 1915 buildInputs = with self; [];
1825 1916 doCheck = false;
1826 1917 propagatedBuildInputs = with self; [];
1827 1918 src = fetchurl {
1828 1919 url = "https://pypi.python.org/packages/f3/4e/7b925192aee656fb3e04fa6381c8b3dc40198047c3b4a356f6cfd642c809/transifex-client-0.10.tar.gz";
1829 1920 md5 = "5549538d84b8eede6b254cd81ae024fa";
1830 1921 };
1831 1922 meta = {
1832 1923 license = [ pkgs.lib.licenses.gpl2 ];
1833 1924 };
1834 1925 };
1835 1926 translationstring = super.buildPythonPackage {
1836 1927 name = "translationstring-1.3";
1837 1928 buildInputs = with self; [];
1838 1929 doCheck = false;
1839 1930 propagatedBuildInputs = with self; [];
1840 1931 src = fetchurl {
1841 1932 url = "https://pypi.python.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
1842 1933 md5 = "a4b62e0f3c189c783a1685b3027f7c90";
1843 1934 };
1844 1935 meta = {
1845 1936 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
1846 1937 };
1847 1938 };
1848 1939 trollius = super.buildPythonPackage {
1849 1940 name = "trollius-1.0.4";
1850 1941 buildInputs = with self; [];
1851 1942 doCheck = false;
1852 1943 propagatedBuildInputs = with self; [futures];
1853 1944 src = fetchurl {
1854 1945 url = "https://pypi.python.org/packages/aa/e6/4141db437f55e6ee7a3fb69663239e3fde7841a811b4bef293145ad6c836/trollius-1.0.4.tar.gz";
1855 1946 md5 = "3631a464d49d0cbfd30ab2918ef2b783";
1856 1947 };
1857 1948 meta = {
1858 1949 license = [ pkgs.lib.licenses.asl20 ];
1859 1950 };
1860 1951 };
1861 1952 uWSGI = super.buildPythonPackage {
1862 name = "uWSGI-2.0.11.2";
1953 name = "uWSGI-2.0.15";
1863 1954 buildInputs = with self; [];
1864 1955 doCheck = false;
1865 1956 propagatedBuildInputs = with self; [];
1866 1957 src = fetchurl {
1867 url = "https://pypi.python.org/packages/9b/78/918db0cfab0546afa580c1e565209c49aaf1476bbfe491314eadbe47c556/uwsgi-2.0.11.2.tar.gz";
1868 md5 = "1f02dcbee7f6f61de4b1fd68350cf16f";
1958 url = "https://pypi.python.org/packages/bb/0a/45e5aa80dc135889594bb371c082d20fb7ee7303b174874c996888cc8511/uwsgi-2.0.15.tar.gz";
1959 md5 = "fc50bd9e83b7602fa474b032167010a7";
1869 1960 };
1870 1961 meta = {
1871 1962 license = [ pkgs.lib.licenses.gpl2 ];
1872 1963 };
1873 1964 };
1874 1965 urllib3 = super.buildPythonPackage {
1875 1966 name = "urllib3-1.16";
1876 1967 buildInputs = with self; [];
1877 1968 doCheck = false;
1878 1969 propagatedBuildInputs = with self; [];
1879 1970 src = fetchurl {
1880 1971 url = "https://pypi.python.org/packages/3b/f0/e763169124e3f5db0926bc3dbfcd580a105f9ca44cf5d8e6c7a803c9f6b5/urllib3-1.16.tar.gz";
1881 1972 md5 = "fcaab1c5385c57deeb7053d3d7d81d59";
1882 1973 };
1883 1974 meta = {
1884 1975 license = [ pkgs.lib.licenses.mit ];
1885 1976 };
1886 1977 };
1887 1978 venusian = super.buildPythonPackage {
1888 name = "venusian-1.0";
1979 name = "venusian-1.1.0";
1889 1980 buildInputs = with self; [];
1890 1981 doCheck = false;
1891 1982 propagatedBuildInputs = with self; [];
1892 1983 src = fetchurl {
1893 url = "https://pypi.python.org/packages/86/20/1948e0dfc4930ddde3da8c33612f6a5717c0b4bc28f591a5c5cf014dd390/venusian-1.0.tar.gz";
1894 md5 = "dccf2eafb7113759d60c86faf5538756";
1984 url = "https://pypi.python.org/packages/38/24/b4b470ab9e0a2e2e9b9030c7735828c8934b4c6b45befd1bb713ec2aeb2d/venusian-1.1.0.tar.gz";
1985 md5 = "56bc5e6756e4bda37bcdb94f74a72b8f";
1895 1986 };
1896 1987 meta = {
1897 1988 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1898 1989 };
1899 1990 };
1900 1991 waitress = super.buildPythonPackage {
1901 name = "waitress-1.0.1";
1992 name = "waitress-1.0.2";
1902 1993 buildInputs = with self; [];
1903 1994 doCheck = false;
1904 1995 propagatedBuildInputs = with self; [];
1905 1996 src = fetchurl {
1906 url = "https://pypi.python.org/packages/78/7d/84d11b96c3f60164dec3bef4a859a03aeae0231aa93f57fbe0d05fa4ff36/waitress-1.0.1.tar.gz";
1907 md5 = "dda92358a7569669086155923a46e57c";
1997 url = "https://pypi.python.org/packages/cd/f4/400d00863afa1e03618e31fd7e2092479a71b8c9718b00eb1eeb603746c6/waitress-1.0.2.tar.gz";
1998 md5 = "b968f39e95d609f6194c6e50425d4bb7";
1908 1999 };
1909 2000 meta = {
1910 2001 license = [ pkgs.lib.licenses.zpt21 ];
1911 2002 };
1912 2003 };
1913 2004 wcwidth = super.buildPythonPackage {
1914 2005 name = "wcwidth-0.1.7";
1915 2006 buildInputs = with self; [];
1916 2007 doCheck = false;
1917 2008 propagatedBuildInputs = with self; [];
1918 2009 src = fetchurl {
1919 2010 url = "https://pypi.python.org/packages/55/11/e4a2bb08bb450fdbd42cc709dd40de4ed2c472cf0ccb9e64af22279c5495/wcwidth-0.1.7.tar.gz";
1920 2011 md5 = "b3b6a0a08f0c8a34d1de8cf44150a4ad";
1921 2012 };
1922 2013 meta = {
1923 2014 license = [ pkgs.lib.licenses.mit ];
1924 2015 };
1925 2016 };
1926 2017 ws4py = super.buildPythonPackage {
1927 2018 name = "ws4py-0.3.5";
1928 2019 buildInputs = with self; [];
1929 2020 doCheck = false;
1930 2021 propagatedBuildInputs = with self; [];
1931 2022 src = fetchurl {
1932 2023 url = "https://pypi.python.org/packages/b6/4f/34af703be86939629479e74d6e650e39f3bd73b3b09212c34e5125764cbc/ws4py-0.3.5.zip";
1933 2024 md5 = "a261b75c20b980e55ce7451a3576a867";
1934 2025 };
1935 2026 meta = {
1936 2027 license = [ pkgs.lib.licenses.bsdOriginal ];
1937 2028 };
1938 2029 };
1939 2030 wsgiref = super.buildPythonPackage {
1940 2031 name = "wsgiref-0.1.2";
1941 2032 buildInputs = with self; [];
1942 2033 doCheck = false;
1943 2034 propagatedBuildInputs = with self; [];
1944 2035 src = fetchurl {
1945 2036 url = "https://pypi.python.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip";
1946 2037 md5 = "29b146e6ebd0f9fb119fe321f7bcf6cb";
1947 2038 };
1948 2039 meta = {
1949 2040 license = [ { fullName = "PSF or ZPL"; } ];
1950 2041 };
1951 2042 };
1952 2043 zope.cachedescriptors = super.buildPythonPackage {
1953 2044 name = "zope.cachedescriptors-4.0.0";
1954 2045 buildInputs = with self; [];
1955 2046 doCheck = false;
1956 2047 propagatedBuildInputs = with self; [setuptools];
1957 2048 src = fetchurl {
1958 2049 url = "https://pypi.python.org/packages/40/33/694b6644c37f28553f4b9f20b3c3a20fb709a22574dff20b5bdffb09ecd5/zope.cachedescriptors-4.0.0.tar.gz";
1959 2050 md5 = "8d308de8c936792c8e758058fcb7d0f0";
1960 2051 };
1961 2052 meta = {
1962 2053 license = [ pkgs.lib.licenses.zpt21 ];
1963 2054 };
1964 2055 };
1965 2056 zope.deprecation = super.buildPythonPackage {
1966 2057 name = "zope.deprecation-4.1.2";
1967 2058 buildInputs = with self; [];
1968 2059 doCheck = false;
1969 2060 propagatedBuildInputs = with self; [setuptools];
1970 2061 src = fetchurl {
1971 2062 url = "https://pypi.python.org/packages/c1/d3/3919492d5e57d8dd01b36f30b34fc8404a30577392b1eb817c303499ad20/zope.deprecation-4.1.2.tar.gz";
1972 2063 md5 = "e9a663ded58f4f9f7881beb56cae2782";
1973 2064 };
1974 2065 meta = {
1975 2066 license = [ pkgs.lib.licenses.zpt21 ];
1976 2067 };
1977 2068 };
1978 2069 zope.event = super.buildPythonPackage {
1979 2070 name = "zope.event-4.0.3";
1980 2071 buildInputs = with self; [];
1981 2072 doCheck = false;
1982 2073 propagatedBuildInputs = with self; [setuptools];
1983 2074 src = fetchurl {
1984 2075 url = "https://pypi.python.org/packages/c1/29/91ba884d7d6d96691df592e9e9c2bfa57a47040ec1ff47eff18c85137152/zope.event-4.0.3.tar.gz";
1985 2076 md5 = "9a3780916332b18b8b85f522bcc3e249";
1986 2077 };
1987 2078 meta = {
1988 2079 license = [ pkgs.lib.licenses.zpt21 ];
1989 2080 };
1990 2081 };
1991 2082 zope.interface = super.buildPythonPackage {
1992 2083 name = "zope.interface-4.1.3";
1993 2084 buildInputs = with self; [];
1994 2085 doCheck = false;
1995 2086 propagatedBuildInputs = with self; [setuptools];
1996 2087 src = fetchurl {
1997 2088 url = "https://pypi.python.org/packages/9d/81/2509ca3c6f59080123c1a8a97125eb48414022618cec0e64eb1313727bfe/zope.interface-4.1.3.tar.gz";
1998 2089 md5 = "9ae3d24c0c7415deb249dd1a132f0f79";
1999 2090 };
2000 2091 meta = {
2001 2092 license = [ pkgs.lib.licenses.zpt21 ];
2002 2093 };
2003 2094 };
2004 2095
2005 2096 ### Test requirements
2006 2097
2007 2098
2008 2099 }
@@ -1,11 +1,15 b''
1 1 [pytest]
2 2 testpaths = ./rhodecode
3 3 pylons_config = rhodecode/tests/rhodecode.ini
4 4 vcsserver_protocol = http
5 5 vcsserver_config_http = rhodecode/tests/vcsserver_http.ini
6 6 norecursedirs = tests/scripts
7 addopts = -k "not _BaseTest"
7
8 addopts =
9 -k "not _BaseTest"
10 --pdbcls=IPython.terminal.debugger:TerminalPdb
11
8 12 markers =
9 13 vcs_operations: Mark tests depending on a running RhodeCode instance.
10 14 xfail_backends: Mark tests as xfail for given backends.
11 15 skip_backends: Mark tests as skipped for given backends.
@@ -1,232 +1,232 b''
1 1 #
2 2 # About
3 3 # =====
4 4 #
5 5 # This file defines jobs for our CI system and the attribute "build" is used
6 6 # as the input for packaging.
7 7 #
8 8 #
9 9 # CI details
10 10 # ==========
11 11 #
12 12 # This file defines an attribute set of derivations. Each of these attributes is
13 13 # then used in our CI system as one job to run. This way we keep the
14 14 # configuration for the CI jobs as well under version control.
15 15 #
16 16 # Run CI jobs locally
17 17 # -------------------
18 18 #
19 19 # Since it is all based on normal Nix derivations, the jobs can be tested
20 20 # locally with a run of "nix-build" like the following example:
21 21 #
22 22 # nix-build release.nix -A test-api -I vcsserver=~/rhodecode-vcsserver
23 23 #
24 24 # Note: Replace "~/rhodecode-vcsserver" with a path where a clone of the
25 25 # vcsserver resides.
26 26
27 27 { pkgs ? import <nixpkgs> {}
28 28 , doCheck ? true
29 29 }:
30 30
31 31 let
32 32
33 33 inherit (pkgs)
34 34 stdenv
35 35 system;
36 36
37 37 testing = import <nixpkgs/nixos/lib/testing.nix> {
38 38 inherit system;
39 39 };
40 40
41 41 runInMachine = testing.runInMachine;
42 42
43 43 sphinx = import ./docs/default.nix {};
44 44
45 45 mkDocs = kind: stdenv.mkDerivation {
46 46 name = kind;
47 47 srcs = [
48 48 (./. + (builtins.toPath "/${kind}"))
49 49 (builtins.filterSource
50 50 (path: type: baseNameOf path == "VERSION")
51 51 ./rhodecode)
52 52 ];
53 53 sourceRoot = kind;
54 54 buildInputs = [ sphinx ];
55 55 configurePhase = null;
56 56 buildPhase = ''
57 57 make SPHINXBUILD=sphinx-build html
58 58 '';
59 59 installPhase = ''
60 60 mkdir -p $out
61 61 mv _build/html $out/
62 62
63 63 mkdir -p $out/nix-support
64 64 echo "doc manual $out/html index.html" >> \
65 65 "$out/nix-support/hydra-build-products"
66 66 '';
67 67 };
68 68
69 69 enterprise = import ./default.nix {
70 70 inherit
71 71 pkgs;
72 72
73 73 # TODO: for quick local testing
74 74 doCheck = false;
75 75 };
76 76
77 77 test-cfg = stdenv.mkDerivation {
78 78 name = "test-cfg";
79 79 unpackPhase = "true";
80 80 buildInputs = [
81 81 enterprise.src
82 82 ];
83 83 installPhase = ''
84 84 mkdir -p $out/etc
85 85 cp ${enterprise.src}/test.ini $out/etc/enterprise.ini
86 86 # TODO: johbo: Needed, so that the login works, this causes
87 87 # probably some side effects
88 88 substituteInPlace $out/etc/enterprise.ini --replace "is_test = True" ""
89 89
90 90 # Gevent configuration
91 91 cp $out/etc/enterprise.ini $out/etc/enterprise-gevent.ini;
92 92 cat >> $out/etc/enterprise-gevent.ini <<EOF
93 93
94 94 [server:main]
95 95 use = egg:gunicorn#main
96 96 worker_class = gevent
97 97 EOF
98 98
99 99 cp ${enterprise.src}/vcsserver/test.ini $out/etc/vcsserver.ini
100 100 '';
101 101 };
102 102
103 103 ac-test-drv = import ./acceptance_tests {
104 104 withExternals = false;
105 105 };
106 106
107 107 # TODO: johbo: Currently abusing buildPythonPackage to make the
108 108 # needed environment for the ac-test tools.
109 109 mkAcTests = {
110 110 # Path to an INI file which will be used to run Enterprise.
111 111 #
112 112 # Intended usage is to provide different configuration files to
113 113 # run the tests against a different configuration.
114 114 enterpriseCfg ? "${test-cfg}/etc/enterprise.ini"
115 115
116 116 # Path to an INI file which will be used to run the VCSServer.
117 117 , vcsserverCfg ? "${test-cfg}/etc/vcsserver.ini"
118 118 }: pkgs.pythonPackages.buildPythonPackage {
119 119 name = "enterprise-ac-tests";
120 120 src = ./acceptance_tests;
121 121
122 122 buildInputs = with pkgs; [
123 123 curl
124 124 enterprise
125 125 ac-test-drv
126 126 ];
127 127
128 128 buildPhase = ''
129 129 cp ${enterpriseCfg} enterprise.ini
130 130
131 131 echo "Creating a fake home directory"
132 132 mkdir fake-home
133 133 export HOME=$PWD/fake-home
134 134
135 135 echo "Creating a repository directory"
136 136 mkdir repos
137 137
138 138 echo "Preparing the database"
139 139 paster setup-rhodecode \
140 140 --user=admin \
141 141 --email=admin@example.com \
142 142 --password=secret \
143 143 --api-key=9999999999999999999999999999999999999999 \
144 144 --force-yes \
145 145 --repos=$PWD/repos \
146 146 enterprise.ini > /dev/null
147 147
148 echo "Starting rcserver"
148 echo "Starting rc-server"
149 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 152 while ! curl -f -s http://localhost:5000 > /dev/null
153 153 do
154 154 echo "Waiting for server to be ready..."
155 155 sleep 3
156 156 done
157 157 echo "Webserver is ready."
158 158
159 159 echo "Starting the test run"
160 160 py.test -c example.ini -vs --maxfail=5 tests
161 161
162 echo "Kill rcserver"
162 echo "Kill rc-server"
163 163 kill %2
164 164 kill %1
165 165 '';
166 166
167 167 # TODO: johbo: Use the install phase again once the normal mkDerivation
168 168 # can be used again.
169 169 postInstall = ''
170 170 mkdir -p $out
171 171 cp enterprise.ini $out
172 172 cp ${vcsserverCfg} $out/vcsserver.ini
173 cp rcserver.log $out
173 cp rc-server.log $out
174 174 cp vcsserver.log $out
175 175
176 176 mkdir -p $out/nix-support
177 177 echo "report config $out enterprise.ini" >> $out/nix-support/hydra-build-products
178 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 180 echo "report vcsserver $out vcsserver.log" >> $out/nix-support/hydra-build-products
181 181 '';
182 182 };
183 183
184 184 vcsserver = import <vcsserver> {
185 185 inherit pkgs;
186 186
187 187 # TODO: johbo: Think of a more elegant solution to this problem
188 188 pythonExternalOverrides = self: super: (enterprise.myPythonPackagesUnfix self);
189 189 };
190 190
191 191 runTests = optionString: (enterprise.override (attrs: {
192 192 doCheck = true;
193 193 name = "test-run";
194 194 buildInputs = attrs.buildInputs ++ [
195 195 vcsserver
196 196 ];
197 197 checkPhase = ''
198 198 py.test ${optionString} -vv -ra
199 199 '';
200 200 buildPhase = attrs.shellHook;
201 201 installPhase = ''
202 202 echo "Intentionally not installing anything"
203 203 '';
204 204 meta.description = "Enterprise test run ${optionString}";
205 205 }));
206 206
207 207 jobs = {
208 208
209 209 build = enterprise;
210 210
211 211 # johbo: Currently this is simply running the tests against the sources. Nicer
212 212 # would be to run xdist and against the installed application, so that we also
213 213 # cover the impact of installing the application.
214 214 test-api = runTests "rhodecode/api";
215 215 test-functional = runTests "rhodecode/tests/functional";
216 216 test-rest = runTests "rhodecode/tests --ignore=rhodecode/tests/functional";
217 217 test-full = runTests "rhodecode";
218 218
219 219 docs = mkDocs "docs";
220 220
221 221 aggregate = pkgs.releaseTools.aggregate {
222 222 name = "aggregated-jobs";
223 223 constituents = [
224 224 jobs.build
225 225 jobs.test-api
226 226 jobs.test-rest
227 227 jobs.docs
228 228 ];
229 229 };
230 230 };
231 231
232 232 in jobs
@@ -1,136 +1,138 b''
1 1 ## core
2 2 setuptools==30.1.0
3 3 setuptools-scm==1.15.0
4 4
5 5 amqplib==1.0.2
6 6 anyjson==0.3.3
7 7 authomatic==0.1.0.post1
8 8 Babel==1.3
9 backport-ipaddress==0.1
10 Beaker==1.7.0
9 Beaker==1.9.0
11 10 celery==2.2.10
12 11 Chameleon==2.24
13 12 channelstream==0.5.2
14 13 click==5.1
15 colander==1.2
14 colander==1.3.3
16 15 configobj==5.0.6
17 16 cssselect==1.0.1
18 17 decorator==4.0.11
19 18 deform==2.0.4
20 docutils==0.12
21 dogpile.cache==0.6.1
19 docutils==0.13.1
20 dogpile.cache==0.6.4
22 21 dogpile.core==0.4.1
23 ecdsa==0.11
22 ecdsa==0.13
24 23 FormEncode==1.2.4
25 24 future==0.14.3
26 25 futures==3.0.2
27 26 gnureadline==6.3.3
28 27 infrae.cache==1.0.1
29 28 iso8601==0.1.11
30 29 itsdangerous==0.24
31 30 Jinja2==2.7.3
32 31 kombu==1.5.1
33 32 lxml==3.7.3
34 Mako==1.0.6
35 Markdown==2.6.7
33 Mako==1.0.7
34 Markdown==2.6.8
36 35 MarkupSafe==0.23
37 36 meld3==1.0.2
38 37 msgpack-python==0.4.8
39 38 MySQL-python==1.2.5
40 39 nose==1.3.6
41 40 objgraph==3.1.0
42 41 packaging==15.2
43 paramiko==1.15.1
44 42 Paste==2.0.3
45 43 PasteDeploy==1.5.2
46 44 PasteScript==1.7.5
47 pathlib2==2.1.0
45 pathlib2==2.3.0
46 peppercorn==0.5
48 47 psutil==4.3.1
49 psycopg2==2.6.1
48 psycopg2==2.7.1
50 49 py-bcrypt==0.4
51 50 pycrypto==2.6.1
52 51 pycurl==7.19.5
53 52 pyflakes==0.8.1
54 53 pygments-markdown-lexer==0.1.0.dev39
55 54 Pygments==2.2.0
56 55 pyparsing==1.5.7
57 56 pyramid-beaker==0.8
58 pyramid-debugtoolbar==3.0.5
57 pyramid-debugtoolbar==4.2.1
59 58 pyramid-jinja2==2.5
60 59 pyramid-mako==1.0.2
61 pyramid==1.7.4
62 pysqlite==2.6.3
60 pyramid==1.9.1
61 pysqlite==2.8.3
63 62 python-dateutil==2.1
64 python-ldap==2.4.19
65 python-memcached==1.57
63 python-ldap==2.4.40
64 python-memcached==1.58
66 65 python-pam==1.8.2
67 66 pytz==2015.4
68 67 pyzmq==14.6.0
69 68 recaptcha-client==1.0.6
69 redis==2.10.6
70 70 repoze.lru==0.6
71 71 requests==2.9.1
72 72 Routes==1.13
73 73 setproctitle==1.1.8
74 simplejson==3.7.2
74 simplejson==3.11.1
75 75 six==1.9.0
76 76 Sphinx==1.2.2
77 SQLAlchemy==0.9.9
78 subprocess32==3.2.6
79 supervisor==3.3.1
77 SQLAlchemy==1.1.11
78 sshpubkeys==2.2.0
79 subprocess32==3.2.7
80 supervisor==3.3.3
80 81 Tempita==0.5.2
81 82 translationstring==1.3
82 83 trollius==1.0.4
83 84 urllib3==1.16
84 85 URLObject==2.4.0
85 venusian==1.0
86 venusian==1.1.0
86 87 WebError==0.10.3
87 88 WebHelpers2==2.0
88 89 WebHelpers==1.3
89 WebOb==1.3.1
90 WebOb==1.7.3
90 91 Whoosh==2.7.4
91 92 wsgiref==0.1.2
92 93 zope.cachedescriptors==4.0.0
93 94 zope.deprecation==4.1.2
94 95 zope.event==4.0.3
95 96 zope.interface==4.1.3
96 97
97 98 ## customized/patched libs
98 99 # our patched version of Pylons==1.0.2
99 100 https://code.rhodecode.com/upstream/pylons/archive/707354ee4261b9c10450404fc9852ccea4fd667d.tar.gz?md5=f26633726fa2cd3a340316ee6a5d218f#egg=Pylons==1.0.2.rhodecode-patch-1
100 101 # not released py-gfm==0.1.3
101 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 104 # IPYTHON RENDERING
104 105 # entrypoints backport, pypi version doesn't support egg installs
105 106 https://code.rhodecode.com/upstream/entrypoints/archive/96e6d645684e1af3d7df5b5272f3fe85a546b233.tar.gz?md5=7db37771aea9ac9fefe093e5d6987313#egg=entrypoints==0.2.2.rhodecode-upstream1
106 107 nbconvert==5.1.1
108 bleach==1.5.0
107 109 nbformat==4.3.0
108 110 jupyter_client==5.0.0
109 111
110 112 ## cli tools
111 alembic==0.8.4
113 alembic==0.9.2
112 114 invoke==0.13.0
113 115 bumpversion==0.5.3
114 116 transifex-client==0.10
115 117
116 118 ## http servers
117 gevent==1.1.2
118 greenlet==0.4.10
119 gunicorn==19.6.0
120 waitress==1.0.1
121 uWSGI==2.0.11.2
119 gevent==1.2.2
120 greenlet==0.4.12
121 gunicorn==19.7.1
122 waitress==1.0.2
123 uWSGI==2.0.15
122 124
123 125 ## debug
124 ipdb==0.10.1
126 ipdb==0.10.3
125 127 ipython==5.1.0
126 CProfileV==1.0.6
128 CProfileV==1.0.7
127 129 bottle==0.12.8
128 130
129 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 134 ## appenlight
133 appenlight-client==0.6.14
135 appenlight-client==0.6.21
134 136
135 137 ## test related requirements
136 138 -r requirements_test.txt
@@ -1,15 +1,15 b''
1 1 # test related requirements
2 pytest==3.0.5
3 py==1.4.31
4 pytest-cov==2.4.0
5 pytest-sugar==0.7.1
6 pytest-runner==2.9.0
2 pytest==3.1.2
3 py==1.4.34
4 pytest-cov==2.5.1
5 pytest-sugar==0.8.0
6 pytest-runner==2.11.1
7 7 pytest-catchlog==1.2.2
8 pytest-profiling==1.2.2
8 pytest-profiling==1.2.6
9 9 gprof2dot==2016.10.13
10 10 pytest-timeout==1.2.0
11 11
12 12 mock==1.0.1
13 WebTest==1.4.3
13 WebTest==2.0.27
14 14 cov-core==1.15.0
15 15 coverage==3.7.1
@@ -1,1 +1,1 b''
1 4.9.1 No newline at end of file
1 4.10.0 No newline at end of file
@@ -1,63 +1,63 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 """
22 22
23 23 RhodeCode, a web based repository management software
24 24 versioning implementation: http://www.python.org/dev/peps/pep-0386/
25 25 """
26 26
27 27 import os
28 28 import sys
29 29 import platform
30 30
31 31 VERSION = tuple(open(os.path.join(
32 32 os.path.dirname(__file__), 'VERSION')).read().split('.'))
33 33
34 34 BACKENDS = {
35 35 'hg': 'Mercurial repository',
36 36 'git': 'Git repository',
37 37 'svn': 'Subversion repository',
38 38 }
39 39
40 40 CELERY_ENABLED = False
41 41 CELERY_EAGER = False
42 42
43 43 # link to config for pylons
44 44 CONFIG = {}
45 45
46 46 # Populated with the settings dictionary from application init in
47 47 # rhodecode.conf.environment.load_pyramid_environment
48 48 PYRAMID_SETTINGS = {}
49 49
50 50 # Linked module for extensions
51 51 EXTENSIONS = {}
52 52
53 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 55 __platform__ = platform.system()
56 56 __license__ = 'AGPLv3, and Commercial License'
57 57 __author__ = 'RhodeCode GmbH'
58 58 __url__ = 'https://code.rhodecode.com'
59 59
60 60 is_windows = __platform__ in ['Windows']
61 61 is_unix = not is_windows
62 62 is_test = False
63 63 disable_error_handler = False
@@ -1,542 +1,542 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2011-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import inspect
22 22 import itertools
23 23 import logging
24 24 import types
25 25 import fnmatch
26 26
27 27 import decorator
28 28 import venusian
29 29 from collections import OrderedDict
30 30
31 31 from pyramid.exceptions import ConfigurationError
32 32 from pyramid.renderers import render
33 33 from pyramid.response import Response
34 34 from pyramid.httpexceptions import HTTPNotFound
35 35
36 36 from rhodecode.api.exc import (
37 37 JSONRPCBaseError, JSONRPCError, JSONRPCForbidden, JSONRPCValidationError)
38 38 from rhodecode.apps._base import TemplateArgs
39 39 from rhodecode.lib.auth import AuthUser
40 40 from rhodecode.lib.base import get_ip_addr, attach_context_attributes
41 41 from rhodecode.lib.ext_json import json
42 42 from rhodecode.lib.utils2 import safe_str
43 43 from rhodecode.lib.plugins.utils import get_plugin_settings
44 44 from rhodecode.model.db import User, UserApiKeys
45 45
46 46 log = logging.getLogger(__name__)
47 47
48 48 DEFAULT_RENDERER = 'jsonrpc_renderer'
49 49 DEFAULT_URL = '/_admin/apiv2'
50 50
51 51
52 52 def find_methods(jsonrpc_methods, pattern):
53 53 matches = OrderedDict()
54 54 if not isinstance(pattern, (list, tuple)):
55 55 pattern = [pattern]
56 56
57 57 for single_pattern in pattern:
58 58 for method_name, method in jsonrpc_methods.items():
59 59 if fnmatch.fnmatch(method_name, single_pattern):
60 60 matches[method_name] = method
61 61 return matches
62 62
63 63
64 64 class ExtJsonRenderer(object):
65 65 """
66 66 Custom renderer that mkaes use of our ext_json lib
67 67
68 68 """
69 69
70 70 def __init__(self, serializer=json.dumps, **kw):
71 71 """ Any keyword arguments will be passed to the ``serializer``
72 72 function."""
73 73 self.serializer = serializer
74 74 self.kw = kw
75 75
76 76 def __call__(self, info):
77 77 """ Returns a plain JSON-encoded string with content-type
78 78 ``application/json``. The content-type may be overridden by
79 79 setting ``request.response.content_type``."""
80 80
81 81 def _render(value, system):
82 82 request = system.get('request')
83 83 if request is not None:
84 84 response = request.response
85 85 ct = response.content_type
86 86 if ct == response.default_content_type:
87 87 response.content_type = 'application/json'
88 88
89 89 return self.serializer(value, **self.kw)
90 90
91 91 return _render
92 92
93 93
94 94 def jsonrpc_response(request, result):
95 95 rpc_id = getattr(request, 'rpc_id', None)
96 96 response = request.response
97 97
98 98 # store content_type before render is called
99 99 ct = response.content_type
100 100
101 101 ret_value = ''
102 102 if rpc_id:
103 103 ret_value = {
104 104 'id': rpc_id,
105 105 'result': result,
106 106 'error': None,
107 107 }
108 108
109 109 # fetch deprecation warnings, and store it inside results
110 110 deprecation = getattr(request, 'rpc_deprecation', None)
111 111 if deprecation:
112 112 ret_value['DEPRECATION_WARNING'] = deprecation
113 113
114 114 raw_body = render(DEFAULT_RENDERER, ret_value, request=request)
115 115 response.body = safe_str(raw_body, response.charset)
116 116
117 117 if ct == response.default_content_type:
118 118 response.content_type = 'application/json'
119 119
120 120 return response
121 121
122 122
123 123 def jsonrpc_error(request, message, retid=None, code=None):
124 124 """
125 125 Generate a Response object with a JSON-RPC error body
126 126
127 127 :param code:
128 128 :param retid:
129 129 :param message:
130 130 """
131 131 err_dict = {'id': retid, 'result': None, 'error': message}
132 132 body = render(DEFAULT_RENDERER, err_dict, request=request).encode('utf-8')
133 133 return Response(
134 134 body=body,
135 135 status=code,
136 136 content_type='application/json'
137 137 )
138 138
139 139
140 140 def exception_view(exc, request):
141 141 rpc_id = getattr(request, 'rpc_id', None)
142 142
143 143 fault_message = 'undefined error'
144 144 if isinstance(exc, JSONRPCError):
145 145 fault_message = exc.message
146 146 log.debug('json-rpc error rpc_id:%s "%s"', rpc_id, fault_message)
147 147 elif isinstance(exc, JSONRPCValidationError):
148 148 colander_exc = exc.colander_exception
149 149 # TODO(marcink): think maybe of nicer way to serialize errors ?
150 150 fault_message = colander_exc.asdict()
151 151 log.debug('json-rpc error rpc_id:%s "%s"', rpc_id, fault_message)
152 152 elif isinstance(exc, JSONRPCForbidden):
153 153 fault_message = 'Access was denied to this resource.'
154 154 log.warning('json-rpc forbidden call rpc_id:%s "%s"', rpc_id, fault_message)
155 155 elif isinstance(exc, HTTPNotFound):
156 156 method = request.rpc_method
157 157 log.debug('json-rpc method `%s` not found in list of '
158 158 'api calls: %s, rpc_id:%s',
159 159 method, request.registry.jsonrpc_methods.keys(), rpc_id)
160 160
161 161 similar = 'none'
162 162 try:
163 163 similar_paterns = ['*{}*'.format(x) for x in method.split('_')]
164 164 similar_found = find_methods(
165 165 request.registry.jsonrpc_methods, similar_paterns)
166 166 similar = ', '.join(similar_found.keys()) or similar
167 167 except Exception:
168 168 # make the whole above block safe
169 169 pass
170 170
171 171 fault_message = "No such method: {}. Similar methods: {}".format(
172 172 method, similar)
173 173
174 174 return jsonrpc_error(request, fault_message, rpc_id)
175 175
176 176
177 177 def request_view(request):
178 178 """
179 179 Main request handling method. It handles all logic to call a specific
180 180 exposed method
181 181 """
182 182
183 183 # check if we can find this session using api_key, get_by_auth_token
184 184 # search not expired tokens only
185 185
186 186 try:
187 187 api_user = User.get_by_auth_token(request.rpc_api_key)
188 188
189 189 if api_user is None:
190 190 return jsonrpc_error(
191 191 request, retid=request.rpc_id, message='Invalid API KEY')
192 192
193 193 if not api_user.active:
194 194 return jsonrpc_error(
195 195 request, retid=request.rpc_id,
196 196 message='Request from this user not allowed')
197 197
198 198 # check if we are allowed to use this IP
199 199 auth_u = AuthUser(
200 200 api_user.user_id, request.rpc_api_key, ip_addr=request.rpc_ip_addr)
201 201 if not auth_u.ip_allowed:
202 202 return jsonrpc_error(
203 203 request, retid=request.rpc_id,
204 204 message='Request from IP:%s not allowed' % (
205 205 request.rpc_ip_addr,))
206 206 else:
207 207 log.info('Access for IP:%s allowed' % (request.rpc_ip_addr,))
208 208
209 209 # register our auth-user
210 210 request.rpc_user = auth_u
211 211
212 212 # now check if token is valid for API
213 213 auth_token = request.rpc_api_key
214 214 token_match = api_user.authenticate_by_token(
215 215 auth_token, roles=[UserApiKeys.ROLE_API])
216 216 invalid_token = not token_match
217 217
218 218 log.debug('Checking if API KEY is valid with proper role')
219 219 if invalid_token:
220 220 return jsonrpc_error(
221 221 request, retid=request.rpc_id,
222 222 message='API KEY invalid or, has bad role for an API call')
223 223
224 224 except Exception:
225 225 log.exception('Error on API AUTH')
226 226 return jsonrpc_error(
227 227 request, retid=request.rpc_id, message='Invalid API KEY')
228 228
229 229 method = request.rpc_method
230 230 func = request.registry.jsonrpc_methods[method]
231 231
232 232 # now that we have a method, add request._req_params to
233 233 # self.kargs and dispatch control to WGIController
234 234 argspec = inspect.getargspec(func)
235 235 arglist = argspec[0]
236 236 defaults = map(type, argspec[3] or [])
237 237 default_empty = types.NotImplementedType
238 238
239 239 # kw arguments required by this method
240 240 func_kwargs = dict(itertools.izip_longest(
241 241 reversed(arglist), reversed(defaults), fillvalue=default_empty))
242 242
243 243 # This attribute will need to be first param of a method that uses
244 244 # api_key, which is translated to instance of user at that name
245 245 user_var = 'apiuser'
246 246 request_var = 'request'
247 247
248 248 for arg in [user_var, request_var]:
249 249 if arg not in arglist:
250 250 return jsonrpc_error(
251 251 request,
252 252 retid=request.rpc_id,
253 253 message='This method [%s] does not support '
254 254 'required parameter `%s`' % (func.__name__, arg))
255 255
256 256 # get our arglist and check if we provided them as args
257 257 for arg, default in func_kwargs.items():
258 258 if arg in [user_var, request_var]:
259 259 # user_var and request_var are pre-hardcoded parameters and we
260 260 # don't need to do any translation
261 261 continue
262 262
263 263 # skip the required param check if it's default value is
264 264 # NotImplementedType (default_empty)
265 265 if default == default_empty and arg not in request.rpc_params:
266 266 return jsonrpc_error(
267 267 request,
268 268 retid=request.rpc_id,
269 269 message=('Missing non optional `%s` arg in JSON DATA' % arg)
270 270 )
271 271
272 272 # sanitize extra passed arguments
273 273 for k in request.rpc_params.keys()[:]:
274 274 if k not in func_kwargs:
275 275 del request.rpc_params[k]
276 276
277 277 call_params = request.rpc_params
278 278 call_params.update({
279 279 'request': request,
280 280 'apiuser': auth_u
281 281 })
282 282
283 283 # register some common functions for usage
284 attach_context_attributes(TemplateArgs(), request, request.rpc_user.user_id,
285 attach_to_request=True)
284 attach_context_attributes(
285 TemplateArgs(), request, request.rpc_user.user_id)
286 286
287 287 try:
288 288 ret_value = func(**call_params)
289 289 return jsonrpc_response(request, ret_value)
290 290 except JSONRPCBaseError:
291 291 raise
292 292 except Exception:
293 293 log.exception('Unhandled exception occurred on api call: %s', func)
294 294 return jsonrpc_error(request, retid=request.rpc_id,
295 295 message='Internal server error')
296 296
297 297
298 298 def setup_request(request):
299 299 """
300 300 Parse a JSON-RPC request body. It's used inside the predicates method
301 301 to validate and bootstrap requests for usage in rpc calls.
302 302
303 303 We need to raise JSONRPCError here if we want to return some errors back to
304 304 user.
305 305 """
306 306
307 307 log.debug('Executing setup request: %r', request)
308 308 request.rpc_ip_addr = get_ip_addr(request.environ)
309 309 # TODO(marcink): deprecate GET at some point
310 310 if request.method not in ['POST', 'GET']:
311 311 log.debug('unsupported request method "%s"', request.method)
312 312 raise JSONRPCError(
313 313 'unsupported request method "%s". Please use POST' % request.method)
314 314
315 315 if 'CONTENT_LENGTH' not in request.environ:
316 316 log.debug("No Content-Length")
317 317 raise JSONRPCError("Empty body, No Content-Length in request")
318 318
319 319 else:
320 320 length = request.environ['CONTENT_LENGTH']
321 321 log.debug('Content-Length: %s', length)
322 322
323 323 if length == 0:
324 324 log.debug("Content-Length is 0")
325 325 raise JSONRPCError("Content-Length is 0")
326 326
327 327 raw_body = request.body
328 328 try:
329 329 json_body = json.loads(raw_body)
330 330 except ValueError as e:
331 331 # catch JSON errors Here
332 332 raise JSONRPCError("JSON parse error ERR:%s RAW:%r" % (e, raw_body))
333 333
334 334 request.rpc_id = json_body.get('id')
335 335 request.rpc_method = json_body.get('method')
336 336
337 337 # check required base parameters
338 338 try:
339 339 api_key = json_body.get('api_key')
340 340 if not api_key:
341 341 api_key = json_body.get('auth_token')
342 342
343 343 if not api_key:
344 344 raise KeyError('api_key or auth_token')
345 345
346 346 # TODO(marcink): support passing in token in request header
347 347
348 348 request.rpc_api_key = api_key
349 349 request.rpc_id = json_body['id']
350 350 request.rpc_method = json_body['method']
351 351 request.rpc_params = json_body['args'] \
352 352 if isinstance(json_body['args'], dict) else {}
353 353
354 354 log.debug(
355 355 'method: %s, params: %s' % (request.rpc_method, request.rpc_params))
356 356 except KeyError as e:
357 357 raise JSONRPCError('Incorrect JSON data. Missing %s' % e)
358 358
359 359 log.debug('setup complete, now handling method:%s rpcid:%s',
360 360 request.rpc_method, request.rpc_id, )
361 361
362 362
363 363 class RoutePredicate(object):
364 364 def __init__(self, val, config):
365 365 self.val = val
366 366
367 367 def text(self):
368 368 return 'jsonrpc route = %s' % self.val
369 369
370 370 phash = text
371 371
372 372 def __call__(self, info, request):
373 373 if self.val:
374 374 # potentially setup and bootstrap our call
375 375 setup_request(request)
376 376
377 377 # Always return True so that even if it isn't a valid RPC it
378 378 # will fall through to the underlaying handlers like notfound_view
379 379 return True
380 380
381 381
382 382 class NotFoundPredicate(object):
383 383 def __init__(self, val, config):
384 384 self.val = val
385 385 self.methods = config.registry.jsonrpc_methods
386 386
387 387 def text(self):
388 388 return 'jsonrpc method not found = {}.'.format(self.val)
389 389
390 390 phash = text
391 391
392 392 def __call__(self, info, request):
393 393 return hasattr(request, 'rpc_method')
394 394
395 395
396 396 class MethodPredicate(object):
397 397 def __init__(self, val, config):
398 398 self.method = val
399 399
400 400 def text(self):
401 401 return 'jsonrpc method = %s' % self.method
402 402
403 403 phash = text
404 404
405 405 def __call__(self, context, request):
406 406 # we need to explicitly return False here, so pyramid doesn't try to
407 407 # execute our view directly. We need our main handler to execute things
408 408 return getattr(request, 'rpc_method') == self.method
409 409
410 410
411 411 def add_jsonrpc_method(config, view, **kwargs):
412 412 # pop the method name
413 413 method = kwargs.pop('method', None)
414 414
415 415 if method is None:
416 416 raise ConfigurationError(
417 417 'Cannot register a JSON-RPC method without specifying the '
418 418 '"method"')
419 419
420 420 # we define custom predicate, to enable to detect conflicting methods,
421 421 # those predicates are kind of "translation" from the decorator variables
422 422 # to internal predicates names
423 423
424 424 kwargs['jsonrpc_method'] = method
425 425
426 426 # register our view into global view store for validation
427 427 config.registry.jsonrpc_methods[method] = view
428 428
429 429 # we're using our main request_view handler, here, so each method
430 430 # has a unified handler for itself
431 431 config.add_view(request_view, route_name='apiv2', **kwargs)
432 432
433 433
434 434 class jsonrpc_method(object):
435 435 """
436 436 decorator that works similar to @add_view_config decorator,
437 437 but tailored for our JSON RPC
438 438 """
439 439
440 440 venusian = venusian # for testing injection
441 441
442 442 def __init__(self, method=None, **kwargs):
443 443 self.method = method
444 444 self.kwargs = kwargs
445 445
446 446 def __call__(self, wrapped):
447 447 kwargs = self.kwargs.copy()
448 448 kwargs['method'] = self.method or wrapped.__name__
449 449 depth = kwargs.pop('_depth', 0)
450 450
451 451 def callback(context, name, ob):
452 452 config = context.config.with_package(info.module)
453 453 config.add_jsonrpc_method(view=ob, **kwargs)
454 454
455 455 info = venusian.attach(wrapped, callback, category='pyramid',
456 456 depth=depth + 1)
457 457 if info.scope == 'class':
458 458 # ensure that attr is set if decorating a class method
459 459 kwargs.setdefault('attr', wrapped.__name__)
460 460
461 461 kwargs['_info'] = info.codeinfo # fbo action_method
462 462 return wrapped
463 463
464 464
465 465 class jsonrpc_deprecated_method(object):
466 466 """
467 467 Marks method as deprecated, adds log.warning, and inject special key to
468 468 the request variable to mark method as deprecated.
469 469 Also injects special docstring that extract_docs will catch to mark
470 470 method as deprecated.
471 471
472 472 :param use_method: specify which method should be used instead of
473 473 the decorated one
474 474
475 475 Use like::
476 476
477 477 @jsonrpc_method()
478 478 @jsonrpc_deprecated_method(use_method='new_func', deprecated_at_version='3.0.0')
479 479 def old_func(request, apiuser, arg1, arg2):
480 480 ...
481 481 """
482 482
483 483 def __init__(self, use_method, deprecated_at_version):
484 484 self.use_method = use_method
485 485 self.deprecated_at_version = deprecated_at_version
486 486 self.deprecated_msg = ''
487 487
488 488 def __call__(self, func):
489 489 self.deprecated_msg = 'Please use method `{method}` instead.'.format(
490 490 method=self.use_method)
491 491
492 492 docstring = """\n
493 493 .. deprecated:: {version}
494 494
495 495 {deprecation_message}
496 496
497 497 {original_docstring}
498 498 """
499 499 func.__doc__ = docstring.format(
500 500 version=self.deprecated_at_version,
501 501 deprecation_message=self.deprecated_msg,
502 502 original_docstring=func.__doc__)
503 503 return decorator.decorator(self.__wrapper, func)
504 504
505 505 def __wrapper(self, func, *fargs, **fkwargs):
506 506 log.warning('DEPRECATED API CALL on function %s, please '
507 507 'use `%s` instead', func, self.use_method)
508 508 # alter function docstring to mark as deprecated, this is picked up
509 509 # via fabric file that generates API DOC.
510 510 result = func(*fargs, **fkwargs)
511 511
512 512 request = fargs[0]
513 513 request.rpc_deprecation = 'DEPRECATED METHOD ' + self.deprecated_msg
514 514 return result
515 515
516 516
517 517 def includeme(config):
518 518 plugin_module = 'rhodecode.api'
519 519 plugin_settings = get_plugin_settings(
520 520 plugin_module, config.registry.settings)
521 521
522 522 if not hasattr(config.registry, 'jsonrpc_methods'):
523 523 config.registry.jsonrpc_methods = OrderedDict()
524 524
525 525 # match filter by given method only
526 526 config.add_view_predicate('jsonrpc_method', MethodPredicate)
527 527
528 528 config.add_renderer(DEFAULT_RENDERER, ExtJsonRenderer(
529 529 serializer=json.dumps, indent=4))
530 530 config.add_directive('add_jsonrpc_method', add_jsonrpc_method)
531 531
532 532 config.add_route_predicate(
533 533 'jsonrpc_call', RoutePredicate)
534 534
535 535 config.add_route(
536 536 'apiv2', plugin_settings.get('url', DEFAULT_URL), jsonrpc_call=True)
537 537
538 538 config.scan(plugin_module, ignore='rhodecode.api.tests')
539 539 # register some exception handling view
540 540 config.add_view(exception_view, context=JSONRPCBaseError)
541 541 config.add_view_predicate('jsonrpc_method_not_found', NotFoundPredicate)
542 542 config.add_notfound_view(exception_view, jsonrpc_method_not_found=True)
@@ -1,52 +1,52 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import pytest
22 22
23 23 from rhodecode.model.meta import Session
24 24 from rhodecode.model.user import UserModel
25 25 from rhodecode.model.auth_token import AuthTokenModel
26 26 from rhodecode.tests import TEST_USER_ADMIN_LOGIN
27 27
28 28
29 29 @pytest.fixture(scope="class")
30 30 def testuser_api(request, pylonsapp):
31 31 cls = request.cls
32 32
33 33 # ADMIN USER
34 34 cls.usr = UserModel().get_by_username(TEST_USER_ADMIN_LOGIN)
35 35 cls.apikey = cls.usr.api_key
36 36
37 37 # REGULAR USER
38 38 cls.test_user = UserModel().create_or_update(
39 39 username='test-api',
40 40 password='test',
41 41 email='test@api.rhodecode.org',
42 42 firstname='first',
43 43 lastname='last'
44 44 )
45 45 # create TOKEN for user, if he doesn't have one
46 46 if not cls.test_user.api_key:
47 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 50 Session().commit()
51 51 cls.TEST_USER_LOGIN = cls.test_user.username
52 52 cls.apikey_regular = cls.test_user.api_key
@@ -1,101 +1,101 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21
22 22 import pytest
23 23
24 24 from rhodecode.model.db import Gist
25 25 from rhodecode.api.tests.utils import (
26 26 build_data, api_call, assert_error, assert_ok)
27 27
28 28
29 29 @pytest.mark.usefixtures("testuser_api", "app")
30 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 32 gist = gist_util.create_gist()
33 33 gist_id = gist.gist_access_id
34 34 gist_created_on = gist.created_on
35 35 gist_modified_at = gist.modified_at
36 36 id_, params = build_data(
37 37 self.apikey, 'get_gist', gistid=gist_id, )
38 38 response = api_call(self.app, params)
39 39
40 40 expected = {
41 41 'access_id': gist_id,
42 42 'created_on': gist_created_on,
43 43 'modified_at': gist_modified_at,
44 44 'description': 'new-gist',
45 45 'expires': -1.0,
46 46 'gist_id': int(gist_id),
47 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 49 'acl_level': Gist.ACL_LEVEL_PUBLIC,
50 50 'content': None,
51 51 }
52 52
53 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 56 mapping = {
57 57 u'filename1.txt': {'content': u'hello world'},
58 58 u'filename1ą.txt': {'content': u'hello worldę'}
59 59 }
60 60 gist = gist_util.create_gist(gist_mapping=mapping)
61 61 gist_id = gist.gist_access_id
62 62 gist_created_on = gist.created_on
63 63 gist_modified_at = gist.modified_at
64 64 id_, params = build_data(
65 65 self.apikey, 'get_gist', gistid=gist_id, content=True)
66 66 response = api_call(self.app, params)
67 67
68 68 expected = {
69 69 'access_id': gist_id,
70 70 'created_on': gist_created_on,
71 71 'modified_at': gist_modified_at,
72 72 'description': 'new-gist',
73 73 'expires': -1.0,
74 74 'gist_id': int(gist_id),
75 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 77 'acl_level': Gist.ACL_LEVEL_PUBLIC,
78 78 'content': {
79 79 u'filename1.txt': u'hello world',
80 80 u'filename1ą.txt': u'hello worldę'
81 81 },
82 82 }
83 83
84 84 assert_ok(id_, expected, given=response.body)
85 85
86 86 def test_api_get_gist_not_existing(self):
87 87 id_, params = build_data(
88 88 self.apikey_regular, 'get_gist', gistid='12345', )
89 89 response = api_call(self.app, params)
90 90 expected = 'gist `%s` does not exist' % ('12345',)
91 91 assert_error(id_, expected, given=response.body)
92 92
93 93 def test_api_get_gist_private_gist_without_permission(self, gist_util):
94 94 gist = gist_util.create_gist()
95 95 gist_id = gist.gist_access_id
96 96 id_, params = build_data(
97 97 self.apikey_regular, 'get_gist', gistid=gist_id, )
98 98 response = api_call(self.app, params)
99 99
100 100 expected = 'gist `%s` does not exist' % (gist_id,)
101 101 assert_error(id_, expected, given=response.body)
@@ -1,134 +1,134 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21
22 22 import pytest
23 23 import urlobject
24 from pylons import url
25 24
26 25 from rhodecode.api.tests.utils import (
27 26 build_data, api_call, assert_error, assert_ok)
27 from rhodecode.lib import helpers as h
28 28 from rhodecode.lib.utils2 import safe_unicode
29 29
30 30 pytestmark = pytest.mark.backends("git", "hg")
31 31
32 32
33 33 @pytest.mark.usefixtures("testuser_api", "app")
34 34 class TestGetPullRequest(object):
35 35
36 36 def test_api_get_pull_request(self, pr_util, http_host_only_stub):
37 37 from rhodecode.model.pull_request import PullRequestModel
38 38 pull_request = pr_util.create_pull_request(mergeable=True)
39 39 id_, params = build_data(
40 40 self.apikey, 'get_pull_request',
41 41 repoid=pull_request.target_repo.repo_name,
42 42 pullrequestid=pull_request.pull_request_id)
43 43
44 44 response = api_call(self.app, params)
45 45
46 46 assert response.status == '200 OK'
47 47
48 48 url_obj = urlobject.URLObject(
49 url(
49 h.route_url(
50 50 'pullrequest_show',
51 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 54 pr_url = safe_unicode(
55 55 url_obj.with_netloc(http_host_only_stub))
56 56 source_url = safe_unicode(
57 57 pull_request.source_repo.clone_url().with_netloc(http_host_only_stub))
58 58 target_url = safe_unicode(
59 59 pull_request.target_repo.clone_url().with_netloc(http_host_only_stub))
60 60 shadow_url = safe_unicode(
61 61 PullRequestModel().get_shadow_clone_url(pull_request))
62 62
63 63 expected = {
64 64 'pull_request_id': pull_request.pull_request_id,
65 65 'url': pr_url,
66 66 'title': pull_request.title,
67 67 'description': pull_request.description,
68 68 'status': pull_request.status,
69 69 'created_on': pull_request.created_on,
70 70 'updated_on': pull_request.updated_on,
71 71 'commit_ids': pull_request.revisions,
72 72 'review_status': pull_request.calculated_review_status(),
73 73 'mergeable': {
74 74 'status': True,
75 75 'message': 'This pull request can be automatically merged.',
76 76 },
77 77 'source': {
78 78 'clone_url': source_url,
79 79 'repository': pull_request.source_repo.repo_name,
80 80 'reference': {
81 81 'name': pull_request.source_ref_parts.name,
82 82 'type': pull_request.source_ref_parts.type,
83 83 'commit_id': pull_request.source_ref_parts.commit_id,
84 84 },
85 85 },
86 86 'target': {
87 87 'clone_url': target_url,
88 88 'repository': pull_request.target_repo.repo_name,
89 89 'reference': {
90 90 'name': pull_request.target_ref_parts.name,
91 91 'type': pull_request.target_ref_parts.type,
92 92 'commit_id': pull_request.target_ref_parts.commit_id,
93 93 },
94 94 },
95 95 'merge': {
96 96 'clone_url': shadow_url,
97 97 'reference': {
98 98 'name': pull_request.shadow_merge_ref.name,
99 99 'type': pull_request.shadow_merge_ref.type,
100 100 'commit_id': pull_request.shadow_merge_ref.commit_id,
101 101 },
102 102 },
103 103 'author': pull_request.author.get_api_data(include_secrets=False,
104 104 details='basic'),
105 105 'reviewers': [
106 106 {
107 107 'user': reviewer.get_api_data(include_secrets=False,
108 108 details='basic'),
109 109 'reasons': reasons,
110 110 'review_status': st[0][1].status if st else 'not_reviewed',
111 111 }
112 112 for reviewer, reasons, mandatory, st in
113 113 pull_request.reviewers_statuses()
114 114 ]
115 115 }
116 116 assert_ok(id_, expected, response.body)
117 117
118 118 def test_api_get_pull_request_repo_error(self):
119 119 id_, params = build_data(
120 120 self.apikey, 'get_pull_request',
121 121 repoid=666, pullrequestid=1)
122 122 response = api_call(self.app, params)
123 123
124 124 expected = 'repository `666` does not exist'
125 125 assert_error(id_, expected, given=response.body)
126 126
127 127 def test_api_get_pull_request_pull_request_error(self):
128 128 id_, params = build_data(
129 129 self.apikey, 'get_pull_request',
130 130 repoid=1, pullrequestid=666)
131 131 response = api_call(self.app, params)
132 132
133 133 expected = 'pull request `666` does not exist'
134 134 assert_error(id_, expected, given=response.body)
@@ -1,129 +1,129 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2010-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21
22 22 import pytest
23 23
24 24 from rhodecode.model.repo import RepoModel
25 25 from rhodecode.api.tests.utils import (
26 26 build_data, api_call, assert_ok, assert_error, jsonify)
27 27 from rhodecode.model.db import User
28 28
29 29
30 30 @pytest.mark.usefixtures("testuser_api", "app")
31 31 class TestGetRepos(object):
32 32 def test_api_get_repos(self):
33 33 id_, params = build_data(self.apikey, 'get_repos')
34 34 response = api_call(self.app, params)
35 35
36 36 result = []
37 37 for repo in RepoModel().get_all():
38 38 result.append(repo.get_api_data(include_secrets=True))
39 39 ret = jsonify(result)
40 40
41 41 expected = ret
42 42 assert_ok(id_, expected, given=response.body)
43 43
44 44 def test_api_get_repos_only_toplevel(self, user_util):
45 45 repo_group = user_util.create_repo_group(auto_cleanup=True)
46 46 user_util.create_repo(parent=repo_group)
47 47
48 48 id_, params = build_data(self.apikey, 'get_repos', traverse=0)
49 49 response = api_call(self.app, params)
50 50
51 51 result = []
52 52 for repo in RepoModel().get_repos_for_root(root=None):
53 53 result.append(repo.get_api_data(include_secrets=True))
54 54 expected = jsonify(result)
55 55
56 56 assert_ok(id_, expected, given=response.body)
57 57
58 58 def test_api_get_repos_with_wrong_root(self):
59 59 id_, params = build_data(self.apikey, 'get_repos', root='abracadabra')
60 60 response = api_call(self.app, params)
61 61
62 62 expected = 'Root repository group `abracadabra` does not exist'
63 63 assert_error(id_, expected, given=response.body)
64 64
65 65 def test_api_get_repos_with_root(self, user_util):
66 66 repo_group = user_util.create_repo_group(auto_cleanup=True)
67 67 repo_group_name = repo_group.group_name
68 68
69 69 user_util.create_repo(parent=repo_group)
70 70 user_util.create_repo(parent=repo_group)
71 71
72 72 # nested, should not show up
73 73 user_util._test_name = '{}/'.format(repo_group_name)
74 74 sub_repo_group = user_util.create_repo_group(auto_cleanup=True)
75 75 user_util.create_repo(parent=sub_repo_group)
76 76
77 77 id_, params = build_data(self.apikey, 'get_repos',
78 78 root=repo_group_name, traverse=0)
79 79 response = api_call(self.app, params)
80 80
81 81 result = []
82 82 for repo in RepoModel().get_repos_for_root(repo_group):
83 83 result.append(repo.get_api_data(include_secrets=True))
84 84
85 85 assert len(result) == 2
86 86 expected = jsonify(result)
87 87 assert_ok(id_, expected, given=response.body)
88 88
89 89 def test_api_get_repos_with_root_and_traverse(self, user_util):
90 90 repo_group = user_util.create_repo_group(auto_cleanup=True)
91 91 repo_group_name = repo_group.group_name
92 92
93 93 user_util.create_repo(parent=repo_group)
94 94 user_util.create_repo(parent=repo_group)
95 95
96 96 # nested, should not show up
97 97 user_util._test_name = '{}/'.format(repo_group_name)
98 98 sub_repo_group = user_util.create_repo_group(auto_cleanup=True)
99 99 user_util.create_repo(parent=sub_repo_group)
100 100
101 101 id_, params = build_data(self.apikey, 'get_repos',
102 102 root=repo_group_name, traverse=1)
103 103 response = api_call(self.app, params)
104 104
105 105 result = []
106 106 for repo in RepoModel().get_repos_for_root(
107 107 repo_group_name, traverse=True):
108 108 result.append(repo.get_api_data(include_secrets=True))
109 109
110 110 assert len(result) == 3
111 111 expected = jsonify(result)
112 112 assert_ok(id_, expected, given=response.body)
113 113
114 114 def test_api_get_repos_non_admin(self):
115 115 id_, params = build_data(self.apikey_regular, 'get_repos')
116 116 response = api_call(self.app, params)
117 117
118 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 121 result = []
122 122 for repo in RepoModel().get_all():
123 123 perm = allowed_repos[repo.repo_name]
124 124 if perm in ['repository.read', 'repository.write', 'repository.admin']:
125 125 result.append(repo.get_api_data())
126 126 ret = jsonify(result)
127 127
128 128 expected = ret
129 129 assert_ok(id_, expected, given=response.body)
@@ -1,779 +1,780 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2011-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21
22 22 import logging
23 23
24 24 from rhodecode import events
25 25 from rhodecode.api import jsonrpc_method, JSONRPCError, JSONRPCValidationError
26 26 from rhodecode.api.utils import (
27 27 has_superadmin_permission, Optional, OAttr, get_repo_or_error,
28 28 get_pull_request_or_error, get_commit_or_error, get_user_or_error,
29 29 validate_repo_permissions, resolve_ref_or_error)
30 30 from rhodecode.lib.auth import (HasRepoPermissionAnyApi)
31 31 from rhodecode.lib.base import vcs_operation_context
32 32 from rhodecode.lib.utils2 import str2bool
33 33 from rhodecode.model.changeset_status import ChangesetStatusModel
34 34 from rhodecode.model.comment import CommentsModel
35 35 from rhodecode.model.db import Session, ChangesetStatus, ChangesetComment
36 36 from rhodecode.model.pull_request import PullRequestModel, MergeCheck
37 37 from rhodecode.model.settings import SettingsModel
38 38 from rhodecode.model.validation_schema import Invalid
39 39 from rhodecode.model.validation_schema.schemas.reviewer_schema import(
40 40 ReviewerListSchema)
41 41
42 42 log = logging.getLogger(__name__)
43 43
44 44
45 45 @jsonrpc_method()
46 46 def get_pull_request(request, apiuser, repoid, pullrequestid):
47 47 """
48 48 Get a pull request based on the given ID.
49 49
50 50 :param apiuser: This is filled automatically from the |authtoken|.
51 51 :type apiuser: AuthUser
52 52 :param repoid: Repository name or repository ID from where the pull
53 53 request was opened.
54 54 :type repoid: str or int
55 55 :param pullrequestid: ID of the requested pull request.
56 56 :type pullrequestid: int
57 57
58 58 Example output:
59 59
60 60 .. code-block:: bash
61 61
62 62 "id": <id_given_in_input>,
63 63 "result":
64 64 {
65 65 "pull_request_id": "<pull_request_id>",
66 66 "url": "<url>",
67 67 "title": "<title>",
68 68 "description": "<description>",
69 69 "status" : "<status>",
70 70 "created_on": "<date_time_created>",
71 71 "updated_on": "<date_time_updated>",
72 72 "commit_ids": [
73 73 ...
74 74 "<commit_id>",
75 75 "<commit_id>",
76 76 ...
77 77 ],
78 78 "review_status": "<review_status>",
79 79 "mergeable": {
80 80 "status": "<bool>",
81 81 "message": "<message>",
82 82 },
83 83 "source": {
84 84 "clone_url": "<clone_url>",
85 85 "repository": "<repository_name>",
86 86 "reference":
87 87 {
88 88 "name": "<name>",
89 89 "type": "<type>",
90 90 "commit_id": "<commit_id>",
91 91 }
92 92 },
93 93 "target": {
94 94 "clone_url": "<clone_url>",
95 95 "repository": "<repository_name>",
96 96 "reference":
97 97 {
98 98 "name": "<name>",
99 99 "type": "<type>",
100 100 "commit_id": "<commit_id>",
101 101 }
102 102 },
103 103 "merge": {
104 104 "clone_url": "<clone_url>",
105 105 "reference":
106 106 {
107 107 "name": "<name>",
108 108 "type": "<type>",
109 109 "commit_id": "<commit_id>",
110 110 }
111 111 },
112 112 "author": <user_obj>,
113 113 "reviewers": [
114 114 ...
115 115 {
116 116 "user": "<user_obj>",
117 117 "review_status": "<review_status>",
118 118 }
119 119 ...
120 120 ]
121 121 },
122 122 "error": null
123 123 """
124 124 get_repo_or_error(repoid)
125 125 pull_request = get_pull_request_or_error(pullrequestid)
126 126 if not PullRequestModel().check_user_read(
127 127 pull_request, apiuser, api=True):
128 128 raise JSONRPCError('repository `%s` does not exist' % (repoid,))
129 129 data = pull_request.get_api_data()
130 130 return data
131 131
132 132
133 133 @jsonrpc_method()
134 134 def get_pull_requests(request, apiuser, repoid, status=Optional('new')):
135 135 """
136 136 Get all pull requests from the repository specified in `repoid`.
137 137
138 138 :param apiuser: This is filled automatically from the |authtoken|.
139 139 :type apiuser: AuthUser
140 140 :param repoid: Repository name or repository ID.
141 141 :type repoid: str or int
142 142 :param status: Only return pull requests with the specified status.
143 143 Valid options are.
144 144 * ``new`` (default)
145 145 * ``open``
146 146 * ``closed``
147 147 :type status: str
148 148
149 149 Example output:
150 150
151 151 .. code-block:: bash
152 152
153 153 "id": <id_given_in_input>,
154 154 "result":
155 155 [
156 156 ...
157 157 {
158 158 "pull_request_id": "<pull_request_id>",
159 159 "url": "<url>",
160 160 "title" : "<title>",
161 161 "description": "<description>",
162 162 "status": "<status>",
163 163 "created_on": "<date_time_created>",
164 164 "updated_on": "<date_time_updated>",
165 165 "commit_ids": [
166 166 ...
167 167 "<commit_id>",
168 168 "<commit_id>",
169 169 ...
170 170 ],
171 171 "review_status": "<review_status>",
172 172 "mergeable": {
173 173 "status": "<bool>",
174 174 "message: "<message>",
175 175 },
176 176 "source": {
177 177 "clone_url": "<clone_url>",
178 178 "reference":
179 179 {
180 180 "name": "<name>",
181 181 "type": "<type>",
182 182 "commit_id": "<commit_id>",
183 183 }
184 184 },
185 185 "target": {
186 186 "clone_url": "<clone_url>",
187 187 "reference":
188 188 {
189 189 "name": "<name>",
190 190 "type": "<type>",
191 191 "commit_id": "<commit_id>",
192 192 }
193 193 },
194 194 "merge": {
195 195 "clone_url": "<clone_url>",
196 196 "reference":
197 197 {
198 198 "name": "<name>",
199 199 "type": "<type>",
200 200 "commit_id": "<commit_id>",
201 201 }
202 202 },
203 203 "author": <user_obj>,
204 204 "reviewers": [
205 205 ...
206 206 {
207 207 "user": "<user_obj>",
208 208 "review_status": "<review_status>",
209 209 }
210 210 ...
211 211 ]
212 212 }
213 213 ...
214 214 ],
215 215 "error": null
216 216
217 217 """
218 218 repo = get_repo_or_error(repoid)
219 219 if not has_superadmin_permission(apiuser):
220 220 _perms = (
221 221 'repository.admin', 'repository.write', 'repository.read',)
222 222 validate_repo_permissions(apiuser, repoid, repo, _perms)
223 223
224 224 status = Optional.extract(status)
225 225 pull_requests = PullRequestModel().get_all(repo, statuses=[status])
226 226 data = [pr.get_api_data() for pr in pull_requests]
227 227 return data
228 228
229 229
230 230 @jsonrpc_method()
231 231 def merge_pull_request(
232 232 request, apiuser, repoid, pullrequestid,
233 233 userid=Optional(OAttr('apiuser'))):
234 234 """
235 235 Merge the pull request specified by `pullrequestid` into its target
236 236 repository.
237 237
238 238 :param apiuser: This is filled automatically from the |authtoken|.
239 239 :type apiuser: AuthUser
240 240 :param repoid: The Repository name or repository ID of the
241 241 target repository to which the |pr| is to be merged.
242 242 :type repoid: str or int
243 243 :param pullrequestid: ID of the pull request which shall be merged.
244 244 :type pullrequestid: int
245 245 :param userid: Merge the pull request as this user.
246 246 :type userid: Optional(str or int)
247 247
248 248 Example output:
249 249
250 250 .. code-block:: bash
251 251
252 252 "id": <id_given_in_input>,
253 253 "result": {
254 254 "executed": "<bool>",
255 255 "failure_reason": "<int>",
256 256 "merge_commit_id": "<merge_commit_id>",
257 257 "possible": "<bool>",
258 258 "merge_ref": {
259 259 "commit_id": "<commit_id>",
260 260 "type": "<type>",
261 261 "name": "<name>"
262 262 }
263 263 },
264 264 "error": null
265 265 """
266 266 repo = get_repo_or_error(repoid)
267 267 if not isinstance(userid, Optional):
268 268 if (has_superadmin_permission(apiuser) or
269 269 HasRepoPermissionAnyApi('repository.admin')(
270 270 user=apiuser, repo_name=repo.repo_name)):
271 271 apiuser = get_user_or_error(userid)
272 272 else:
273 273 raise JSONRPCError('userid is not the same as your user')
274 274
275 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 279 merge_possible = not check.failed
279 280
280 281 if not merge_possible:
281 282 error_messages = []
282 283 for err_type, error_msg in check.errors:
283 284 error_msg = request.translate(error_msg)
284 285 error_messages.append(error_msg)
285 286
286 287 reasons = ','.join(error_messages)
287 288 raise JSONRPCError(
288 289 'merge not possible for following reasons: {}'.format(reasons))
289 290
290 291 target_repo = pull_request.target_repo
291 292 extras = vcs_operation_context(
292 293 request.environ, repo_name=target_repo.repo_name,
293 294 username=apiuser.username, action='push',
294 295 scm=target_repo.repo_type)
295 296 merge_response = PullRequestModel().merge(
296 297 pull_request, apiuser, extras=extras)
297 298 if merge_response.executed:
298 299 PullRequestModel().close_pull_request(
299 300 pull_request.pull_request_id, apiuser)
300 301
301 302 Session().commit()
302 303
303 304 # In previous versions the merge response directly contained the merge
304 305 # commit id. It is now contained in the merge reference object. To be
305 306 # backwards compatible we have to extract it again.
306 307 merge_response = merge_response._asdict()
307 308 merge_response['merge_commit_id'] = merge_response['merge_ref'].commit_id
308 309
309 310 return merge_response
310 311
311 312
312 313 @jsonrpc_method()
313 314 def comment_pull_request(
314 315 request, apiuser, repoid, pullrequestid, message=Optional(None),
315 316 commit_id=Optional(None), status=Optional(None),
316 317 comment_type=Optional(ChangesetComment.COMMENT_TYPE_NOTE),
317 318 resolves_comment_id=Optional(None),
318 319 userid=Optional(OAttr('apiuser'))):
319 320 """
320 321 Comment on the pull request specified with the `pullrequestid`,
321 322 in the |repo| specified by the `repoid`, and optionally change the
322 323 review status.
323 324
324 325 :param apiuser: This is filled automatically from the |authtoken|.
325 326 :type apiuser: AuthUser
326 327 :param repoid: The repository name or repository ID.
327 328 :type repoid: str or int
328 329 :param pullrequestid: The pull request ID.
329 330 :type pullrequestid: int
330 331 :param commit_id: Specify the commit_id for which to set a comment. If
331 332 given commit_id is different than latest in the PR status
332 333 change won't be performed.
333 334 :type commit_id: str
334 335 :param message: The text content of the comment.
335 336 :type message: str
336 337 :param status: (**Optional**) Set the approval status of the pull
337 338 request. One of: 'not_reviewed', 'approved', 'rejected',
338 339 'under_review'
339 340 :type status: str
340 341 :param comment_type: Comment type, one of: 'note', 'todo'
341 342 :type comment_type: Optional(str), default: 'note'
342 343 :param userid: Comment on the pull request as this user
343 344 :type userid: Optional(str or int)
344 345
345 346 Example output:
346 347
347 348 .. code-block:: bash
348 349
349 350 id : <id_given_in_input>
350 351 result : {
351 352 "pull_request_id": "<Integer>",
352 353 "comment_id": "<Integer>",
353 354 "status": {"given": <given_status>,
354 355 "was_changed": <bool status_was_actually_changed> },
355 356 },
356 357 error : null
357 358 """
358 359 repo = get_repo_or_error(repoid)
359 360 if not isinstance(userid, Optional):
360 361 if (has_superadmin_permission(apiuser) or
361 362 HasRepoPermissionAnyApi('repository.admin')(
362 363 user=apiuser, repo_name=repo.repo_name)):
363 364 apiuser = get_user_or_error(userid)
364 365 else:
365 366 raise JSONRPCError('userid is not the same as your user')
366 367
367 368 pull_request = get_pull_request_or_error(pullrequestid)
368 369 if not PullRequestModel().check_user_read(
369 370 pull_request, apiuser, api=True):
370 371 raise JSONRPCError('repository `%s` does not exist' % (repoid,))
371 372 message = Optional.extract(message)
372 373 status = Optional.extract(status)
373 374 commit_id = Optional.extract(commit_id)
374 375 comment_type = Optional.extract(comment_type)
375 376 resolves_comment_id = Optional.extract(resolves_comment_id)
376 377
377 378 if not message and not status:
378 379 raise JSONRPCError(
379 380 'Both message and status parameters are missing. '
380 381 'At least one is required.')
381 382
382 383 if (status not in (st[0] for st in ChangesetStatus.STATUSES) and
383 384 status is not None):
384 385 raise JSONRPCError('Unknown comment status: `%s`' % status)
385 386
386 387 if commit_id and commit_id not in pull_request.revisions:
387 388 raise JSONRPCError(
388 389 'Invalid commit_id `%s` for this pull request.' % commit_id)
389 390
390 391 allowed_to_change_status = PullRequestModel().check_user_change_status(
391 392 pull_request, apiuser)
392 393
393 394 # if commit_id is passed re-validated if user is allowed to change status
394 395 # based on latest commit_id from the PR
395 396 if commit_id:
396 397 commit_idx = pull_request.revisions.index(commit_id)
397 398 if commit_idx != 0:
398 399 allowed_to_change_status = False
399 400
400 401 if resolves_comment_id:
401 402 comment = ChangesetComment.get(resolves_comment_id)
402 403 if not comment:
403 404 raise JSONRPCError(
404 405 'Invalid resolves_comment_id `%s` for this pull request.'
405 406 % resolves_comment_id)
406 407 if comment.comment_type != ChangesetComment.COMMENT_TYPE_TODO:
407 408 raise JSONRPCError(
408 409 'Comment `%s` is wrong type for setting status to resolved.'
409 410 % resolves_comment_id)
410 411
411 412 text = message
412 413 status_label = ChangesetStatus.get_status_lbl(status)
413 414 if status and allowed_to_change_status:
414 415 st_message = ('Status change %(transition_icon)s %(status)s'
415 416 % {'transition_icon': '>', 'status': status_label})
416 417 text = message or st_message
417 418
418 419 rc_config = SettingsModel().get_all_settings()
419 420 renderer = rc_config.get('rhodecode_markup_renderer', 'rst')
420 421
421 422 status_change = status and allowed_to_change_status
422 423 comment = CommentsModel().create(
423 424 text=text,
424 425 repo=pull_request.target_repo.repo_id,
425 426 user=apiuser.user_id,
426 427 pull_request=pull_request.pull_request_id,
427 428 f_path=None,
428 429 line_no=None,
429 430 status_change=(status_label if status_change else None),
430 431 status_change_type=(status if status_change else None),
431 432 closing_pr=False,
432 433 renderer=renderer,
433 434 comment_type=comment_type,
434 435 resolves_comment_id=resolves_comment_id
435 436 )
436 437
437 438 if allowed_to_change_status and status:
438 439 ChangesetStatusModel().set_status(
439 440 pull_request.target_repo.repo_id,
440 441 status,
441 442 apiuser.user_id,
442 443 comment,
443 444 pull_request=pull_request.pull_request_id
444 445 )
445 446 Session().flush()
446 447
447 448 Session().commit()
448 449 data = {
449 450 'pull_request_id': pull_request.pull_request_id,
450 451 'comment_id': comment.comment_id if comment else None,
451 452 'status': {'given': status, 'was_changed': status_change},
452 453 }
453 454 return data
454 455
455 456
456 457 @jsonrpc_method()
457 458 def create_pull_request(
458 459 request, apiuser, source_repo, target_repo, source_ref, target_ref,
459 460 title, description=Optional(''), reviewers=Optional(None)):
460 461 """
461 462 Creates a new pull request.
462 463
463 464 Accepts refs in the following formats:
464 465
465 466 * branch:<branch_name>:<sha>
466 467 * branch:<branch_name>
467 468 * bookmark:<bookmark_name>:<sha> (Mercurial only)
468 469 * bookmark:<bookmark_name> (Mercurial only)
469 470
470 471 :param apiuser: This is filled automatically from the |authtoken|.
471 472 :type apiuser: AuthUser
472 473 :param source_repo: Set the source repository name.
473 474 :type source_repo: str
474 475 :param target_repo: Set the target repository name.
475 476 :type target_repo: str
476 477 :param source_ref: Set the source ref name.
477 478 :type source_ref: str
478 479 :param target_ref: Set the target ref name.
479 480 :type target_ref: str
480 481 :param title: Set the pull request title.
481 482 :type title: str
482 483 :param description: Set the pull request description.
483 484 :type description: Optional(str)
484 485 :param reviewers: Set the new pull request reviewers list.
485 486 Reviewer defined by review rules will be added automatically to the
486 487 defined list.
487 488 :type reviewers: Optional(list)
488 489 Accepts username strings or objects of the format:
489 490
490 491 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
491 492 """
492 493
493 494 source_db_repo = get_repo_or_error(source_repo)
494 495 target_db_repo = get_repo_or_error(target_repo)
495 496 if not has_superadmin_permission(apiuser):
496 497 _perms = ('repository.admin', 'repository.write', 'repository.read',)
497 498 validate_repo_permissions(apiuser, source_repo, source_db_repo, _perms)
498 499
499 500 full_source_ref = resolve_ref_or_error(source_ref, source_db_repo)
500 501 full_target_ref = resolve_ref_or_error(target_ref, target_db_repo)
501 502 source_commit = get_commit_or_error(full_source_ref, source_db_repo)
502 503 target_commit = get_commit_or_error(full_target_ref, target_db_repo)
503 504 source_scm = source_db_repo.scm_instance()
504 505 target_scm = target_db_repo.scm_instance()
505 506
506 507 commit_ranges = target_scm.compare(
507 508 target_commit.raw_id, source_commit.raw_id, source_scm,
508 509 merge=True, pre_load=[])
509 510
510 511 ancestor = target_scm.get_common_ancestor(
511 512 target_commit.raw_id, source_commit.raw_id, source_scm)
512 513
513 514 if not commit_ranges:
514 515 raise JSONRPCError('no commits found')
515 516
516 517 if not ancestor:
517 518 raise JSONRPCError('no common ancestor found')
518 519
519 520 reviewer_objects = Optional.extract(reviewers) or []
520 521
521 522 if reviewer_objects:
522 523 schema = ReviewerListSchema()
523 524 try:
524 525 reviewer_objects = schema.deserialize(reviewer_objects)
525 526 except Invalid as err:
526 527 raise JSONRPCValidationError(colander_exc=err)
527 528
528 529 # validate users
529 530 for reviewer_object in reviewer_objects:
530 531 user = get_user_or_error(reviewer_object['username'])
531 532 reviewer_object['user_id'] = user.user_id
532 533
533 534 get_default_reviewers_data, get_validated_reviewers = \
534 535 PullRequestModel().get_reviewer_functions()
535 536
536 537 reviewer_rules = get_default_reviewers_data(
537 538 apiuser.get_instance(), source_db_repo,
538 539 source_commit, target_db_repo, target_commit)
539 540
540 541 # specified rules are later re-validated, thus we can assume users will
541 542 # eventually provide those that meet the reviewer criteria.
542 543 if not reviewer_objects:
543 544 reviewer_objects = reviewer_rules['reviewers']
544 545
545 546 try:
546 547 reviewers = get_validated_reviewers(
547 548 reviewer_objects, reviewer_rules)
548 549 except ValueError as e:
549 550 raise JSONRPCError('Reviewers Validation: {}'.format(e))
550 551
551 552 pull_request_model = PullRequestModel()
552 553 pull_request = pull_request_model.create(
553 554 created_by=apiuser.user_id,
554 555 source_repo=source_repo,
555 556 source_ref=full_source_ref,
556 557 target_repo=target_repo,
557 558 target_ref=full_target_ref,
558 559 revisions=reversed(
559 560 [commit.raw_id for commit in reversed(commit_ranges)]),
560 561 reviewers=reviewers,
561 562 title=title,
562 563 description=Optional.extract(description)
563 564 )
564 565
565 566 Session().commit()
566 567 data = {
567 568 'msg': 'Created new pull request `{}`'.format(title),
568 569 'pull_request_id': pull_request.pull_request_id,
569 570 }
570 571 return data
571 572
572 573
573 574 @jsonrpc_method()
574 575 def update_pull_request(
575 576 request, apiuser, repoid, pullrequestid, title=Optional(''),
576 577 description=Optional(''), reviewers=Optional(None),
577 578 update_commits=Optional(None)):
578 579 """
579 580 Updates a pull request.
580 581
581 582 :param apiuser: This is filled automatically from the |authtoken|.
582 583 :type apiuser: AuthUser
583 584 :param repoid: The repository name or repository ID.
584 585 :type repoid: str or int
585 586 :param pullrequestid: The pull request ID.
586 587 :type pullrequestid: int
587 588 :param title: Set the pull request title.
588 589 :type title: str
589 590 :param description: Update pull request description.
590 591 :type description: Optional(str)
591 592 :param reviewers: Update pull request reviewers list with new value.
592 593 :type reviewers: Optional(list)
593 594 Accepts username strings or objects of the format:
594 595
595 596 [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}]
596 597
597 598 :param update_commits: Trigger update of commits for this pull request
598 599 :type: update_commits: Optional(bool)
599 600
600 601 Example output:
601 602
602 603 .. code-block:: bash
603 604
604 605 id : <id_given_in_input>
605 606 result : {
606 607 "msg": "Updated pull request `63`",
607 608 "pull_request": <pull_request_object>,
608 609 "updated_reviewers": {
609 610 "added": [
610 611 "username"
611 612 ],
612 613 "removed": []
613 614 },
614 615 "updated_commits": {
615 616 "added": [
616 617 "<sha1_hash>"
617 618 ],
618 619 "common": [
619 620 "<sha1_hash>",
620 621 "<sha1_hash>",
621 622 ],
622 623 "removed": []
623 624 }
624 625 }
625 626 error : null
626 627 """
627 628
628 629 repo = get_repo_or_error(repoid)
629 630 pull_request = get_pull_request_or_error(pullrequestid)
630 631 if not PullRequestModel().check_user_update(
631 632 pull_request, apiuser, api=True):
632 633 raise JSONRPCError(
633 634 'pull request `%s` update failed, no permission to update.' % (
634 635 pullrequestid,))
635 636 if pull_request.is_closed():
636 637 raise JSONRPCError(
637 638 'pull request `%s` update failed, pull request is closed' % (
638 639 pullrequestid,))
639 640
640 641 reviewer_objects = Optional.extract(reviewers) or []
641 642
642 643 if reviewer_objects:
643 644 schema = ReviewerListSchema()
644 645 try:
645 646 reviewer_objects = schema.deserialize(reviewer_objects)
646 647 except Invalid as err:
647 648 raise JSONRPCValidationError(colander_exc=err)
648 649
649 650 # validate users
650 651 for reviewer_object in reviewer_objects:
651 652 user = get_user_or_error(reviewer_object['username'])
652 653 reviewer_object['user_id'] = user.user_id
653 654
654 655 get_default_reviewers_data, get_validated_reviewers = \
655 656 PullRequestModel().get_reviewer_functions()
656 657
657 658 # re-use stored rules
658 659 reviewer_rules = pull_request.reviewer_data
659 660 try:
660 661 reviewers = get_validated_reviewers(
661 662 reviewer_objects, reviewer_rules)
662 663 except ValueError as e:
663 664 raise JSONRPCError('Reviewers Validation: {}'.format(e))
664 665 else:
665 666 reviewers = []
666 667
667 668 title = Optional.extract(title)
668 669 description = Optional.extract(description)
669 670 if title or description:
670 671 PullRequestModel().edit(
671 672 pull_request, title or pull_request.title,
672 673 description or pull_request.description, apiuser)
673 674 Session().commit()
674 675
675 676 commit_changes = {"added": [], "common": [], "removed": []}
676 677 if str2bool(Optional.extract(update_commits)):
677 678 if PullRequestModel().has_valid_update_type(pull_request):
678 679 update_response = PullRequestModel().update_commits(
679 680 pull_request)
680 681 commit_changes = update_response.changes or commit_changes
681 682 Session().commit()
682 683
683 684 reviewers_changes = {"added": [], "removed": []}
684 685 if reviewers:
685 686 added_reviewers, removed_reviewers = \
686 687 PullRequestModel().update_reviewers(pull_request, reviewers, apiuser)
687 688
688 689 reviewers_changes['added'] = sorted(
689 690 [get_user_or_error(n).username for n in added_reviewers])
690 691 reviewers_changes['removed'] = sorted(
691 692 [get_user_or_error(n).username for n in removed_reviewers])
692 693 Session().commit()
693 694
694 695 data = {
695 696 'msg': 'Updated pull request `{}`'.format(
696 697 pull_request.pull_request_id),
697 698 'pull_request': pull_request.get_api_data(),
698 699 'updated_commits': commit_changes,
699 700 'updated_reviewers': reviewers_changes
700 701 }
701 702
702 703 return data
703 704
704 705
705 706 @jsonrpc_method()
706 707 def close_pull_request(
707 708 request, apiuser, repoid, pullrequestid,
708 709 userid=Optional(OAttr('apiuser')), message=Optional('')):
709 710 """
710 711 Close the pull request specified by `pullrequestid`.
711 712
712 713 :param apiuser: This is filled automatically from the |authtoken|.
713 714 :type apiuser: AuthUser
714 715 :param repoid: Repository name or repository ID to which the pull
715 716 request belongs.
716 717 :type repoid: str or int
717 718 :param pullrequestid: ID of the pull request to be closed.
718 719 :type pullrequestid: int
719 720 :param userid: Close the pull request as this user.
720 721 :type userid: Optional(str or int)
721 722 :param message: Optional message to close the Pull Request with. If not
722 723 specified it will be generated automatically.
723 724 :type message: Optional(str)
724 725
725 726 Example output:
726 727
727 728 .. code-block:: bash
728 729
729 730 "id": <id_given_in_input>,
730 731 "result": {
731 732 "pull_request_id": "<int>",
732 733 "close_status": "<str:status_lbl>,
733 734 "closed": "<bool>"
734 735 },
735 736 "error": null
736 737
737 738 """
738 739 _ = request.translate
739 740
740 741 repo = get_repo_or_error(repoid)
741 742 if not isinstance(userid, Optional):
742 743 if (has_superadmin_permission(apiuser) or
743 744 HasRepoPermissionAnyApi('repository.admin')(
744 745 user=apiuser, repo_name=repo.repo_name)):
745 746 apiuser = get_user_or_error(userid)
746 747 else:
747 748 raise JSONRPCError('userid is not the same as your user')
748 749
749 750 pull_request = get_pull_request_or_error(pullrequestid)
750 751
751 752 if pull_request.is_closed():
752 753 raise JSONRPCError(
753 754 'pull request `%s` is already closed' % (pullrequestid,))
754 755
755 756 # only owner or admin or person with write permissions
756 757 allowed_to_close = PullRequestModel().check_user_update(
757 758 pull_request, apiuser, api=True)
758 759
759 760 if not allowed_to_close:
760 761 raise JSONRPCError(
761 762 'pull request `%s` close failed, no permission to close.' % (
762 763 pullrequestid,))
763 764
764 765 # message we're using to close the PR, else it's automatically generated
765 766 message = Optional.extract(message)
766 767
767 768 # finally close the PR, with proper message comment
768 769 comment, status = PullRequestModel().close_pull_request_with_comment(
769 770 pull_request, apiuser, repo, message=message)
770 771 status_lbl = ChangesetStatus.get_status_lbl(status)
771 772
772 773 Session().commit()
773 774
774 775 data = {
775 776 'pull_request_id': pull_request.pull_request_id,
776 777 'close_status': status_lbl,
777 778 'closed': True,
778 779 }
779 780 return data
@@ -1,321 +1,351 b''
1 1 # -*- coding: utf-8 -*-
2 2
3 3 # Copyright (C) 2011-2017 RhodeCode GmbH
4 4 #
5 5 # This program is free software: you can redistribute it and/or modify
6 6 # it under the terms of the GNU Affero General Public License, version 3
7 7 # (only), as published by the Free Software Foundation.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU Affero General Public License
15 15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 16 #
17 17 # This program is dual-licensed. If you wish to learn more about the
18 18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20 20
21 21 import inspect
22 22 import logging
23 23 import itertools
24 24
25 25 from rhodecode.api import (
26 26 jsonrpc_method, JSONRPCError, JSONRPCForbidden, find_methods)
27 27
28 28 from rhodecode.api.utils import (
29 29 Optional, OAttr, has_superadmin_permission, get_user_or_error)
30 30 from rhodecode.lib.utils import repo2db_mapper
31 31 from rhodecode.lib import system_info
32 32 from rhodecode.lib import user_sessions
33 33 from rhodecode.lib.utils2 import safe_int
34 34 from rhodecode.model.db import UserIpMap
35 35 from rhodecode.model.scm import ScmModel
36 from rhodecode.model.settings import VcsSettingsModel
36 37
37 38 log = logging.getLogger(__name__)
38 39
39 40
40 41 @jsonrpc_method()
41 42 def get_server_info(request, apiuser):
42 43 """
43 44 Returns the |RCE| server information.
44 45
45 46 This includes the running version of |RCE| and all installed
46 47 packages. This command takes the following options:
47 48
48 49 :param apiuser: This is filled automatically from the |authtoken|.
49 50 :type apiuser: AuthUser
50 51
51 52 Example output:
52 53
53 54 .. code-block:: bash
54 55
55 56 id : <id_given_in_input>
56 57 result : {
57 58 'modules': [<module name>,...]
58 59 'py_version': <python version>,
59 60 'platform': <platform type>,
60 61 'rhodecode_version': <rhodecode version>
61 62 }
62 63 error : null
63 64 """
64 65
65 66 if not has_superadmin_permission(apiuser):
66 67 raise JSONRPCForbidden()
67 68
68 69 server_info = ScmModel().get_server_info(request.environ)
69 70 # rhodecode-index requires those
70 71
71 72 server_info['index_storage'] = server_info['search']['value']['location']
72 73 server_info['storage'] = server_info['storage']['value']['path']
73 74
74 75 return server_info
75 76
76 77
77 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 108 def get_ip(request, apiuser, userid=Optional(OAttr('apiuser'))):
79 109 """
80 110 Displays the IP Address as seen from the |RCE| server.
81 111
82 112 * This command displays the IP Address, as well as all the defined IP
83 113 addresses for the specified user. If the ``userid`` is not set, the
84 114 data returned is for the user calling the method.
85 115
86 116 This command can only be run using an |authtoken| with admin rights to
87 117 the specified repository.
88 118
89 119 This command takes the following options:
90 120
91 121 :param apiuser: This is filled automatically from |authtoken|.
92 122 :type apiuser: AuthUser
93 123 :param userid: Sets the userid for which associated IP Address data
94 124 is returned.
95 125 :type userid: Optional(str or int)
96 126
97 127 Example output:
98 128
99 129 .. code-block:: bash
100 130
101 131 id : <id_given_in_input>
102 132 result : {
103 133 "server_ip_addr": "<ip_from_clien>",
104 134 "user_ips": [
105 135 {
106 136 "ip_addr": "<ip_with_mask>",
107 137 "ip_range": ["<start_ip>", "<end_ip>"],
108 138 },
109 139 ...
110 140 ]
111 141 }
112 142
113 143 """
114 144 if not has_superadmin_permission(apiuser):
115 145 raise JSONRPCForbidden()
116 146
117 147 userid = Optional.extract(userid, evaluate_locals=locals())
118 148 userid = getattr(userid, 'user_id', userid)
119 149
120 150 user = get_user_or_error(userid)
121 151 ips = UserIpMap.query().filter(UserIpMap.user == user).all()
122 152 return {
123 153 'server_ip_addr': request.rpc_ip_addr,
124 154 'user_ips': ips
125 155 }
126 156
127 157
128 158 @jsonrpc_method()
129 159 def rescan_repos(request, apiuser, remove_obsolete=Optional(False)):
130 160 """
131 161 Triggers a rescan of the specified repositories.
132 162
133 163 * If the ``remove_obsolete`` option is set, it also deletes repositories
134 164 that are found in the database but not on the file system, so called
135 165 "clean zombies".
136 166
137 167 This command can only be run using an |authtoken| with admin rights to
138 168 the specified repository.
139 169
140 170 This command takes the following options:
141 171
142 172 :param apiuser: This is filled automatically from the |authtoken|.
143 173 :type apiuser: AuthUser
144 174 :param remove_obsolete: Deletes repositories from the database that
145 175 are not found on the filesystem.
146 176 :type remove_obsolete: Optional(``True`` | ``False``)
147 177
148 178 Example output:
149 179
150 180 .. code-block:: bash
151 181
152 182 id : <id_given_in_input>
153 183 result : {
154 184 'added': [<added repository name>,...]
155 185 'removed': [<removed repository name>,...]
156 186 }
157 187 error : null
158 188
159 189 Example error output:
160 190
161 191 .. code-block:: bash
162 192
163 193 id : <id_given_in_input>
164 194 result : null
165 195 error : {
166 196 'Error occurred during rescan repositories action'
167 197 }
168 198
169 199 """
170 200 if not has_superadmin_permission(apiuser):
171 201 raise JSONRPCForbidden()
172 202
173 203 try:
174 204 rm_obsolete = Optional.extract(remove_obsolete)
175 205 added, removed = repo2db_mapper(ScmModel().repo_scan(),
176 206 remove_obsolete=rm_obsolete)
177 207 return {'added': added, 'removed': removed}
178 208 except Exception:
179 209 log.exception('Failed to run repo rescann')
180 210 raise JSONRPCError(
181 211 'Error occurred during rescan repositories action'
182 212 )
183 213
184 214
185 215 @jsonrpc_method()
186 216 def cleanup_sessions(request, apiuser, older_then=Optional(60)):
187 217 """
188 218 Triggers a session cleanup action.
189 219
190 220 If the ``older_then`` option is set, only sessions that hasn't been
191 221 accessed in the given number of days will be removed.
192 222
193 223 This command can only be run using an |authtoken| with admin rights to
194 224 the specified repository.
195 225
196 226 This command takes the following options:
197 227
198 228 :param apiuser: This is filled automatically from the |authtoken|.
199 229 :type apiuser: AuthUser
200 230 :param older_then: Deletes session that hasn't been accessed
201 231 in given number of days.
202 232 :type older_then: Optional(int)
203 233
204 234 Example output:
205 235
206 236 .. code-block:: bash
207 237
208 238 id : <id_given_in_input>
209 239 result: {
210 240 "backend": "<type of backend>",
211 241 "sessions_removed": <number_of_removed_sessions>
212 242 }
213 243 error : null
214 244
215 245 Example error output:
216 246
217 247 .. code-block:: bash
218 248
219 249 id : <id_given_in_input>
220 250 result : null
221 251 error : {
222 252 'Error occurred during session cleanup'
223 253 }
224 254
225 255 """
226 256 if not has_superadmin_permission(apiuser):
227 257 raise JSONRPCForbidden()
228 258
229 259 older_then = safe_int(Optional.extract(older_then)) or 60
230 260 older_than_seconds = 60 * 60 * 24 * older_then
231 261
232 262 config = system_info.rhodecode_config().get_value()['value']['config']
233 263 session_model = user_sessions.get_session_handler(
234 264 config.get('beaker.session.type', 'memory'))(config)
235 265
236 266 backend = session_model.SESSION_TYPE
237 267 try:
238 268 cleaned = session_model.clean_sessions(
239 269 older_than_seconds=older_than_seconds)
240 270 return {'sessions_removed': cleaned, 'backend': backend}
241 271 except user_sessions.CleanupCommand as msg:
242 272 return {'cleanup_command': msg.message, 'backend': backend}
243 273 except Exception as e:
244 274 log.exception('Failed session cleanup')
245 275 raise JSONRPCError(
246 276 'Error occurred during session cleanup'
247 277 )
248 278
249 279
250 280 @jsonrpc_method()
251 281 def get_method(request, apiuser, pattern=Optional('*')):
252 282 """
253 283 Returns list of all available API methods. By default match pattern
254 284 os "*" but any other pattern can be specified. eg *comment* will return
255 285 all methods with comment inside them. If just single method is matched
256 286 returned data will also include method specification
257 287
258 288 This command can only be run using an |authtoken| with admin rights to
259 289 the specified repository.
260 290
261 291 This command takes the following options:
262 292
263 293 :param apiuser: This is filled automatically from the |authtoken|.
264 294 :type apiuser: AuthUser
265 295 :param pattern: pattern to match method names against
266 296 :type older_then: Optional("*")
267 297
268 298 Example output:
269 299
270 300 .. code-block:: bash
271 301
272 302 id : <id_given_in_input>
273 303 "result": [
274 304 "changeset_comment",
275 305 "comment_pull_request",
276 306 "comment_commit"
277 307 ]
278 308 error : null
279 309
280 310 .. code-block:: bash
281 311
282 312 id : <id_given_in_input>
283 313 "result": [
284 314 "comment_commit",
285 315 {
286 316 "apiuser": "<RequiredType>",
287 317 "comment_type": "<Optional:u'note'>",
288 318 "commit_id": "<RequiredType>",
289 319 "message": "<RequiredType>",
290 320 "repoid": "<RequiredType>",
291 321 "request": "<RequiredType>",
292 322 "resolves_comment_id": "<Optional:None>",
293 323 "status": "<Optional:None>",
294 324 "userid": "<Optional:<OptionalAttr:apiuser>>"
295 325 }
296 326 ]
297 327 error : null
298 328 """
299 329 if not has_superadmin_permission(apiuser):
300 330 raise JSONRPCForbidden()
301 331
302 332 pattern = Optional.extract(pattern)
303 333
304 334 matches = find_methods(request.registry.jsonrpc_methods, pattern)
305 335
306 336 args_desc = []
307 337 if len(matches) == 1:
308 338 func = matches[matches.keys()[0]]
309 339
310 340 argspec = inspect.getargspec(func)
311 341 arglist = argspec[0]
312 342 defaults = map(repr, argspec[3] or [])
313 343
314 344 default_empty = '<RequiredType>'
315 345
316 346 # kw arguments required by this method
317 347 func_kwargs = dict(itertools.izip_longest(
318 348 reversed(arglist), reversed(defaults), fillvalue=default_empty))
319 349 args_desc.append(func_kwargs)
320 350
321 351 return matches.keys() + args_desc
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
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
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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
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
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
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
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
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
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
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
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
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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
1 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
1 NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
1 NO CONTENT: modified file chmod 100644 => 100755, binary diff hidden
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
The requested commit or file is too big and content was truncated. Show full diff
1 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
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