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

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

@@ -0,0 +1,137 b''
1 .. _svn-http:
2
3 |svn| With Write Over HTTP
4 ^^^^^^^^^^^^^^^^^^^^^^^^^^
5
6 To use |svn| with read/write support over the |svn| HTTP protocol, you have to
7 configure the HTTP |svn| backend.
8
9 Prerequisites
10 =============
11
12 - Enable HTTP support inside the admin VCS settings on your |RCE| instance
13 - You need to install the following tools on the machine that is running an
14 instance of |RCE|:
15 ``Apache HTTP Server`` and ``mod_dav_svn``.
16
17
18 Using Ubuntu 14.04 Distribution as an example execute the following:
19
20 .. code-block:: bash
21
22 $ sudo apt-get install apache2 libapache2-mod-svn
23
24 Once installed you need to enable ``dav_svn``:
25
26 .. code-block:: bash
27
28 $ sudo a2enmod dav_svn
29 $ sudo a2enmod headers
30
31
32 Configuring Apache Setup
33 ========================
34
35 .. tip::
36
37 It is recommended to run Apache on a port other than 80, due to possible
38 conflicts with other HTTP servers like nginx. To do this, set the
39 ``Listen`` parameter in the ``/etc/apache2/ports.conf`` file, for example
40 ``Listen 8090``.
41
42
43 .. warning::
44
45 Make sure your Apache instance which runs the mod_dav_svn module is
46 only accessible by |RCE|. Otherwise everyone is able to browse
47 the repositories or run subversion operations (checkout/commit/etc.).
48
49 It is also recommended to run apache as the same user as |RCE|, otherwise
50 permission issues could occur. To do this edit the ``/etc/apache2/envvars``
51
52 .. code-block:: apache
53
54 export APACHE_RUN_USER=rhodecode
55 export APACHE_RUN_GROUP=rhodecode
56
57 1. To configure Apache, create and edit a virtual hosts file, for example
58 :file:`/etc/apache2/sites-available/default.conf`. Below is an example
59 how to use one with auto-generated config ```mod_dav_svn.conf```
60 from configured |RCE| instance.
61
62 .. code-block:: apache
63
64 <VirtualHost *:8090>
65 ServerAdmin rhodecode-admin@localhost
66 DocumentRoot /var/www/html
67 ErrorLog ${'${APACHE_LOG_DIR}'}/error.log
68 CustomLog ${'${APACHE_LOG_DIR}'}/access.log combined
69 Include /home/user/.rccontrol/enterprise-1/mod_dav_svn.conf
70 </VirtualHost>
71
72
73 2. Go to the :menuselection:`Admin --> Settings --> VCS` page, and
74 enable :guilabel:`Proxy Subversion HTTP requests`, and specify the
75 :guilabel:`Subversion HTTP Server URL`.
76
77 3. Open the |RCE| configuration file,
78 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
79
80 4. Add the following configuration option in the ``[app:main]``
81 section if you don't have it yet.
82
83 This enables mapping of the created |RCE| repo groups into special
84 |svn| paths. Each time a new repository group is created, the system will
85 update the template file and create new mapping. Apache web server needs to
86 be reloaded to pick up the changes on this file.
87 To do this, simply configure `svn.proxy.reload_cmd` inside the .ini file.
88 Example configuration:
89
90
91 .. code-block:: ini
92
93 ############################################################
94 ### Subversion proxy support (mod_dav_svn) ###
95 ### Maps RhodeCode repo groups into SVN paths for Apache ###
96 ############################################################
97 ## Enable or disable the config file generation.
98 svn.proxy.generate_config = true
99 ## Generate config file with `SVNListParentPath` set to `On`.
100 svn.proxy.list_parent_path = true
101 ## Set location and file name of generated config file.
102 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
103 ## Used as a prefix to the <Location> block in the generated config file.
104 ## In most cases it should be set to `/`.
105 svn.proxy.location_root = /
106 ## Command to reload the mod dav svn configuration on change.
107 ## Example: `/etc/init.d/apache2 reload`
108 svn.proxy.reload_cmd = /etc/init.d/apache2 reload
109 ## If the timeout expires before the reload command finishes, the command will
110 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
111 #svn.proxy.reload_timeout = 10
112
113
114 This would create a special template file called ```mod_dav_svn.conf```. We
115 used that file path in the apache config above inside the Include statement.
116 It's also possible to generate the config from the
117 :menuselection:`Admin --> Settings --> VCS` page.
118
119
120 Using |svn|
121 ===========
122
123 Once |svn| has been enabled on your instance, you can use it with the
124 following examples. For more |svn| information, see the `Subversion Red Book`_
125
126 .. code-block:: bash
127
128 # To clone a repository
129 svn checkout http://my-svn-server.example.com/my-svn-repo
130
131 # svn commit
132 svn commit
133
134
135 .. _Subversion Red Book: http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.ref.svn
136
137 .. _Ask Ubuntu: http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue No newline at end of file
@@ -0,0 +1,17 b''
1 .. _checklist-pull-request:
2
3 =======================
4 Pull Request Checklists
5 =======================
6
7
8
9 Checklists for Pull Request
10 ===========================
11
12
13 - Informative description
14 - Linear commit history
15 - Rebased on top of latest changes
16 - Add ticket references. eg fixes #123, references #123 etc.
17
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
@@ -0,0 +1,159 b''
1 |RCE| 4.5.0 |RNS|
2 -----------------
3
4 Release Date
5 ^^^^^^^^^^^^
6
7 - 2016-12-02
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13 - Diffs: re-implemented diff engine. Added: Syntax highlighting inside diffs,
14 new side-by-side view with commenting and live chat. Enabled soft-wrapping of
15 long lines and much improved rendering speed for large diffs.
16 - File source view: new file display engine. File view now
17 soft wraps long lines. Double click inside file view show occurrences of
18 clicked item. Added pygments-markdown-lexer for highlighting markdown syntax.
19 - Files annotation: Added new grouped annotations. Color all related commits
20 by double clicking singe commit in annotation view.
21 - Pull request reviewers (EE only): added new default reviewers functionality.
22 Allows picking users or user groups defined as reviewers for new pull request.
23 Picking reviewers can be based on branch name, changed file name patterns or
24 original author of changed source code. eg *.css -> design team.
25 Master branch -> repo owner, fixes #1131.
26 - Pull request reviewers: store and show reasons why given person is a reviewer.
27 Manually adding reviewers after creating a PR will now be also indicated
28 together with who added a given person to review.
29 - Integrations: Webhooks integration now allows to use variables inside the
30 call URL. Currently supported variables are ${repo_name}, ${repo_type},
31 ${repo_id}, ${repo_url}, ${branch}, ${commit_id}, ${pull_request_id},
32 ${pull_request_url}. Commits are now grouped by branches as well.
33 Allows much easier integration with CI systems.
34 - Integrations (EE only): allow wildcard * project key in Jira integration
35 settings to allow referencing multiple projects per commit, fixes #4267.
36 - Live notifications: RhodeCode sends live notification to online
37 users on certain events and pages. Currently this works on: invite to chat,
38 update pull request, commit/inline comment. Part of live code review system.
39 Allows users to update the reviewed code while doing the review and never
40 miss any updates or comment replies as they happen. Requires channelstream
41 to be enabled.
42 - Repository groups: added default personal repository groups. Personal groups
43 are isolated playground for users allowing them to create projects or forks.
44 Adds new setting to automatically create personal repo groups for newly
45 created users. New groups are created from specified pattern, for example
46 /u/{username}. Implements #4003.
47 - Security: It's now possible to disable password reset functionality.
48 This is useful for cases when users only use LDAP or similar types of
49 authentication. Implements #3944
50 - Pull requests: exposed shadow repositories to end users. Users are now given
51 access to the shadow repository which represents state after merge performed.
52 In this way users or especially CI servers can much easier perform code
53 analysis of the final merged code.
54 - Pull requests: My account > pull request page now uses datagrid.
55 It's faster, filterable and sortable. Fixes #4297.
56 - Pull requests: delete pull request action was moved from my account
57 into pull request view itself. This is where everyone was looking for it.
58 - Pull requests: improve showing failed merges with proper status in pull
59 request page.
60 - User groups: overhaul of edit user group page. Added new selector for
61 adding new user group members.
62 - Licensing (EE only): exposed unlock link to deactivate users that are over
63 license limit, to unlock full functionality. This might happen when migrating
64 from CE into EE, and your license supports less active users then allowed.
65 - Global settings: add a new header/footer template to allow flash filtering.
66 In case a license warning appears and admin wants to hide it for some time.
67 The new template can be used to do this.
68 - System info: added create snapshot button to easily generate system state
69 report. Comes in handy for support and reporting. System state holds
70 information such as free disk/memory, CPU load and some of RhodeCode settings.
71 - System info: fetch and show vcs settings from vcsserver. Fixes #4276.
72 - System info: use real memory usage based on new psutil api available.
73 - System info: added info about temporary storage.
74 - System info: expose inode limits and usage. Fixes #4282.
75 - Ui: added new icon for merge commit.
76
77
78
79 General
80 ^^^^^^^
81
82 - Notifications: move all notifications into polymer for consistency.
83 Fixes #4201.
84 - Live chat (EE): Improved UI for live-chat. Use Codemirror editor as
85 input for text box.
86 - Api: WARNING DEPRECATION, refactor repository group schemas. Fixes #4133.
87 When using create_repo, create_repo_group, update_repo, update_repo_group
88 the *_name parameter now takes full path including sub repository groups.
89 This is the only way to add resource under another repository group.
90 Furthermore giving non-existing path will no longer create the missing
91 structure. This change makes the api more consistent, it better validates
92 the errors in the data sent to given api call.
93 - Pull requests: disable subrepo handling on pull requests. It means users can
94 now use more types of repositories with subrepos to create pull requests.
95 Since handling is disabled, repositories behind authentication, or outside
96 of network can be used.
97 - VCSServer: fetch backend info from vcsserver including git/hg/svn versions
98 and connection information.
99 - Svn support: it's no longer required to put in repo root path to
100 generate mod-dav-svn config. Fixes #4203.
101 - Svn support: Add reload command option (svn.proxy.reload_cmd) to ini files.
102 Apache can now be automatically reloaded when the mod_dav_svn config changes.
103 - Svn support: Add a view to trigger the (re)generation of Apache mod_dav_svn
104 configuration file. Users are able to generate such file manually by clicking
105 that button.
106 - Dependency: updated subversion library to 1.9.
107 - Dependency: updated ipython to 5.1.0.
108 - Dependency: updated psutil to 4.3.1.
109
110
111 Security
112 ^^^^^^^^
113
114 - Hipchat: escape user entered data to avoid xss/formatting problems.
115 - VCSServer: obfuscate credentials added into remote url during remote
116 repository creation. Prevents leaking of those credentials inside
117 RhodeCode logs.
118
119
120 Performance
121 ^^^^^^^^^^^
122
123 - Diffs: new diff engine is much smarter when it comes to showing huge diffs.
124 The rendering speed should be much improved in such cases, however showing
125 full diff is still supported.
126 - VCS backends: when using a repo object from database, re-use this information
127 instead of trying to detect a backend. Reduces the traffic to vcsserver.
128 - Pull requests: Add a column to hold the last merge revision. This will skip
129 heavy recalculation of merge state if nothing changed inside a pull request.
130 - File source view: don't load the file if it is over the size limit since it
131 won't be displayed anyway. This increases speed of loading the page when a
132 file is above cut-off limit defined.
133
134
135 Fixes
136 ^^^^^
137
138 - Users admin: fixed search filter in user admin page.
139 - Autocomplete: improve the lookup of users with non-ascii characters. In case
140 of unicode email the previous method could generate wrong data, and
141 make search not show up such users.
142 - Svn: added request header downgrade for COPY command to work on
143 https setup. Fixes #4307.
144 - Svn: add handling of renamed files inside our generated changes metadata.
145 Fixes #4258.
146 - Pull requests: fixed problem with creating pull requests on empty repositories.
147 - Events: use branch from previous commit for repo push event commits data so
148 that per-branch grouping works. Fixes #4233.
149 - Login: make sure recaptcha data is always validated. Fixes #4279.
150 - Vcs: Use commit date as modification time when creating archives.
151 Fixes problem with unstable hashes for archives. Fixes #4247.
152 - Issue trackers: fixed bug where saving empty issue tracker via form was
153 causing exception. Fixes #4278.
154 - Styling: fixed gravatar size for pull request reviewers.
155 - Ldap: fixed email extraction typo. An empty email from LDAP server will now
156 not overwrite the stored one.
157 - Integrations: use consistent formatting of users data in Slack integration.
158 - Meta-tags: meta tags are not taken into account when truncating descriptions
159 that are too long. Fixes #4305. No newline at end of file
@@ -0,0 +1,14 b''
1 Copyright 2006 Google Inc.
2 http://code.google.com/p/google-diff-match-patch/
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
@@ -0,0 +1,12 b''
1 Copyright © 2015 Jürgen Hermann <jh@web.de>
2
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 http://www.apache.org/licenses/LICENSE-2.0
7
8 Unless required by applicable law or agreed to in writing, software
9 distributed under the License is distributed on an "AS IS" BASIS,
10 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 See the License for the specific language governing permissions and
12 limitations under the License.
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,6 +1,6 b''
1 [bumpversion]
1 [bumpversion]
2 current_version = 4.4.2
2 current_version = 4.5.0
3 message = release: Bump version {current_version} to {new_version}
3 message = release: Bump version {current_version} to {new_version}
4
4
5 [bumpversion:file:rhodecode/VERSION]
5 [bumpversion:file:rhodecode/VERSION]
6
6
@@ -1,65 +1,66 b''
1 syntax: glob
1 syntax: glob
2 *.egg
2 *.egg
3 *.egg-info
3 *.egg-info
4 *.idea
4 *.idea
5 *.orig
5 *.orig
6 *.pyc
6 *.pyc
7 *.sqlite-journal
7 *.sqlite-journal
8 *.swp
8 *.swp
9 *.tox
9 *.tox
10 *.DS_Store*
10 *.DS_Store*
11 rhodecode/public/js/src/components/**/*.css
11 rhodecode/public/js/src/components/**/*.css
12
12
13 syntax: regexp
13 syntax: regexp
14
14
15 #.filename
15 #.filename
16 ^\.settings$
16 ^\.settings$
17 ^\.project$
17 ^\.project$
18 ^\.pydevproject$
18 ^\.pydevproject$
19 ^\.coverage$
19 ^\.coverage$
20 ^\.cache.*$
20 ^\.cache.*$
21 ^\.rhodecode$
21 ^\.rhodecode$
22
22
23 ^rcextensions
23 ^rcextensions
24 ^_dev
24 ^_dev
25 ^._dev
25 ^._dev
26 ^build/
26 ^build/
27 ^bower_components/
27 ^bower_components/
28 ^coverage\.xml$
28 ^coverage\.xml$
29 ^data$
29 ^data$
30 ^\.eggs/
30 ^\.eggs/
31 ^configs/data$
31 ^configs/data$
32 ^dev.ini$
32 ^dev.ini$
33 ^acceptance_tests/dev.*\.ini$
33 ^acceptance_tests/dev.*\.ini$
34 ^dist/
34 ^dist/
35 ^fabfile.py
35 ^fabfile.py
36 ^htmlcov
36 ^htmlcov
37 ^junit\.xml$
37 ^junit\.xml$
38 ^node_modules/
38 ^node_modules/
39 ^pylint.log$
39 ^pylint.log$
40 ^rcextensions/
40 ^rcextensions/
41 ^result$
41 ^result$
42 ^rhodecode/public/css/style.css$
42 ^rhodecode/public/css/style.css$
43 ^rhodecode/public/css/style-polymer.css$
43 ^rhodecode/public/css/style-polymer.css$
44 ^rhodecode/public/js/rhodecode-components.html$
44 ^rhodecode/public/js/rhodecode-components.html$
45 ^rhodecode/public/js/scripts.js$
45 ^rhodecode/public/js/scripts.js$
46 ^rhodecode/public/js/rhodecode-components.js$
46 ^rhodecode/public/js/src/components/root-styles.gen.html$
47 ^rhodecode/public/js/src/components/root-styles.gen.html$
47 ^rhodecode/public/js/vendors/webcomponentsjs/
48 ^rhodecode/public/js/vendors/webcomponentsjs/
48 ^rhodecode\.db$
49 ^rhodecode\.db$
49 ^rhodecode\.log$
50 ^rhodecode\.log$
50 ^rhodecode_dev\.log$
51 ^rhodecode_dev\.log$
51 ^test\.db$
52 ^test\.db$
52
53
53 # ac-tests
54 # ac-tests
54 ^acceptance_tests/\.cache.*$
55 ^acceptance_tests/\.cache.*$
55 ^acceptance_tests/externals
56 ^acceptance_tests/externals
56 ^acceptance_tests/ghostdriver.log$
57 ^acceptance_tests/ghostdriver.log$
57 ^acceptance_tests/local(_.+)?\.ini$
58 ^acceptance_tests/local(_.+)?\.ini$
58
59
59 # docs
60 # docs
60 ^docs/_build$
61 ^docs/_build$
61 ^docs/result$
62 ^docs/result$
62 ^docs-internal/_build$
63 ^docs-internal/_build$
63
64
64 # Cythonized things
65 # Cythonized things
65 ^rhodecode/.*\.(c|so)$
66 ^rhodecode/.*\.(c|so)$
@@ -1,33 +1,28 b''
1 [DEFAULT]
1 [DEFAULT]
2 done = false
2 done = false
3
3
4 [task:bump_version]
4 [task:bump_version]
5 done = true
5 done = true
6
6
7 [task:rc_tools_pinned]
8 done = true
9
10 [task:fixes_on_stable]
7 [task:fixes_on_stable]
11 done = true
12
8
13 [task:pip2nix_generated]
9 [task:pip2nix_generated]
14 done = true
15
10
16 [task:changelog_updated]
11 [task:changelog_updated]
17 done = true
18
12
19 [task:generate_api_docs]
13 [task:generate_api_docs]
20 done = true
14
15 [task:updated_translation]
21
16
22 [release]
17 [release]
23 state = prepared
18 state = in_progress
24 version = 4.4.2
19 version = 4.5.0
25
20
26 [task:updated_translation]
21 [task:rc_tools_pinned]
27
22
28 [task:generate_js_routes]
23 [task:generate_js_routes]
29
24
30 [task:updated_trial_license]
25 [task:updated_trial_license]
31
26
32 [task:generate_oss_licenses]
27 [task:generate_oss_licenses]
33
28
@@ -1,15 +1,15 b''
1 var gruntConfig = require('./grunt_config.json');
1 var gruntConfig = require('./grunt_config.json');
2
2
3 module.exports = function(grunt) {
3 module.exports = function(grunt) {
4 grunt.initConfig(gruntConfig);
4 grunt.initConfig(gruntConfig);
5
5
6 grunt.loadNpmTasks('grunt-contrib-less');
6 grunt.loadNpmTasks('grunt-contrib-less');
7 grunt.loadNpmTasks('grunt-contrib-concat');
7 grunt.loadNpmTasks('grunt-contrib-concat');
8 grunt.loadNpmTasks('grunt-contrib-watch');
8 grunt.loadNpmTasks('grunt-contrib-watch');
9 grunt.loadNpmTasks('grunt-contrib-jshint');
9 grunt.loadNpmTasks('grunt-contrib-jshint');
10 grunt.loadNpmTasks('grunt-vulcanize');
10 grunt.loadNpmTasks('grunt-vulcanize');
11 grunt.loadNpmTasks('grunt-crisper');
11 grunt.loadNpmTasks('grunt-crisper');
12 grunt.loadNpmTasks('grunt-contrib-copy');
12 grunt.loadNpmTasks('grunt-contrib-copy');
13
13
14 grunt.registerTask('default', ['less:production', 'less:components', 'concat:polymercss', 'copy','vulcanize', 'crisper', 'concat:dist']);
14 grunt.registerTask('default', ['less:production', 'less:components', 'concat:polymercss', 'copy', 'concat:dist', 'vulcanize', 'crisper']);
15 };
15 };
@@ -1,692 +1,696 b''
1 This program is free software: you can redistribute it and/or modify
1 This program is free software: you can redistribute it and/or modify
2 it under the terms of the GNU Affero General Public License, version 3
2 it under the terms of the GNU Affero General Public License, version 3
3 (only), as published by the Free Software Foundation.
3 (only), as published by the Free Software Foundation.
4
4
5
5
6 This program incorporates work covered by the following copyright and
6 This program incorporates work covered by the following copyright and
7 permission notice:
7 permission notice:
8
8
9 Copyright (c) 2014-2016 - packaging
9 Copyright (c) 2014-2016 - packaging
10 file:
10 file:
11 Copyright (c) 2008-2011 - msgpack-python
11 Copyright (c) 2008-2011 - msgpack-python
12 file:licenses/msgpack_license.txt
12 file:licenses/msgpack_license.txt
13 Copyright (c) 2009 - tornado
13 Copyright (c) 2009 - tornado
14 file:licenses/tornado_license.txt
14 file:licenses/tornado_license.txt
15 Copyright (c) 2015 - pygments-markdown-lexer
16 file:licenses/pygments_markdown_lexer_license.txt
17 Copyright 2006 - diff_match_patch
18 file:licenses/diff_match_patch_license.txt
15
19
16 All licensed under the Apache License, Version 2.0 (the "License");
20 All licensed under the Apache License, Version 2.0 (the "License");
17 you may not use this file except in compliance with the License.
21 you may not use this file except in compliance with the License.
18 You may obtain a copy of the License at
22 You may obtain a copy of the License at
19
23
20 http://www.apache.org/licenses/LICENSE-2.0
24 http://www.apache.org/licenses/LICENSE-2.0
21
25
22 Unless required by applicable law or agreed to in writing, software
26 Unless required by applicable law or agreed to in writing, software
23 distributed under the License is distributed on an "AS IS" BASIS,
27 distributed under the License is distributed on an "AS IS" BASIS,
24 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 See the License for the specific language governing permissions and
29 See the License for the specific language governing permissions and
26 imitations under the License.
30 imitations under the License.
27
31
28
32
29 Below is the full text of GNU Affero General Public License, version 3
33 Below is the full text of GNU Affero General Public License, version 3
30
34
31
35
32 GNU AFFERO GENERAL PUBLIC LICENSE
36 GNU AFFERO GENERAL PUBLIC LICENSE
33 Version 3, 19 November 2007
37 Version 3, 19 November 2007
34
38
35 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
39 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
36 Everyone is permitted to copy and distribute verbatim copies
40 Everyone is permitted to copy and distribute verbatim copies
37 of this license document, but changing it is not allowed.
41 of this license document, but changing it is not allowed.
38
42
39 Preamble
43 Preamble
40
44
41 The GNU Affero General Public License is a free, copyleft license for
45 The GNU Affero General Public License is a free, copyleft license for
42 software and other kinds of works, specifically designed to ensure
46 software and other kinds of works, specifically designed to ensure
43 cooperation with the community in the case of network server software.
47 cooperation with the community in the case of network server software.
44
48
45 The licenses for most software and other practical works are designed
49 The licenses for most software and other practical works are designed
46 to take away your freedom to share and change the works. By contrast,
50 to take away your freedom to share and change the works. By contrast,
47 our General Public Licenses are intended to guarantee your freedom to
51 our General Public Licenses are intended to guarantee your freedom to
48 share and change all versions of a program--to make sure it remains free
52 share and change all versions of a program--to make sure it remains free
49 software for all its users.
53 software for all its users.
50
54
51 When we speak of free software, we are referring to freedom, not
55 When we speak of free software, we are referring to freedom, not
52 price. Our General Public Licenses are designed to make sure that you
56 price. Our General Public Licenses are designed to make sure that you
53 have the freedom to distribute copies of free software (and charge for
57 have the freedom to distribute copies of free software (and charge for
54 them if you wish), that you receive source code or can get it if you
58 them if you wish), that you receive source code or can get it if you
55 want it, that you can change the software or use pieces of it in new
59 want it, that you can change the software or use pieces of it in new
56 free programs, and that you know you can do these things.
60 free programs, and that you know you can do these things.
57
61
58 Developers that use our General Public Licenses protect your rights
62 Developers that use our General Public Licenses protect your rights
59 with two steps: (1) assert copyright on the software, and (2) offer
63 with two steps: (1) assert copyright on the software, and (2) offer
60 you this License which gives you legal permission to copy, distribute
64 you this License which gives you legal permission to copy, distribute
61 and/or modify the software.
65 and/or modify the software.
62
66
63 A secondary benefit of defending all users' freedom is that
67 A secondary benefit of defending all users' freedom is that
64 improvements made in alternate versions of the program, if they
68 improvements made in alternate versions of the program, if they
65 receive widespread use, become available for other developers to
69 receive widespread use, become available for other developers to
66 incorporate. Many developers of free software are heartened and
70 incorporate. Many developers of free software are heartened and
67 encouraged by the resulting cooperation. However, in the case of
71 encouraged by the resulting cooperation. However, in the case of
68 software used on network servers, this result may fail to come about.
72 software used on network servers, this result may fail to come about.
69 The GNU General Public License permits making a modified version and
73 The GNU General Public License permits making a modified version and
70 letting the public access it on a server without ever releasing its
74 letting the public access it on a server without ever releasing its
71 source code to the public.
75 source code to the public.
72
76
73 The GNU Affero General Public License is designed specifically to
77 The GNU Affero General Public License is designed specifically to
74 ensure that, in such cases, the modified source code becomes available
78 ensure that, in such cases, the modified source code becomes available
75 to the community. It requires the operator of a network server to
79 to the community. It requires the operator of a network server to
76 provide the source code of the modified version running there to the
80 provide the source code of the modified version running there to the
77 users of that server. Therefore, public use of a modified version, on
81 users of that server. Therefore, public use of a modified version, on
78 a publicly accessible server, gives the public access to the source
82 a publicly accessible server, gives the public access to the source
79 code of the modified version.
83 code of the modified version.
80
84
81 An older license, called the Affero General Public License and
85 An older license, called the Affero General Public License and
82 published by Affero, was designed to accomplish similar goals. This is
86 published by Affero, was designed to accomplish similar goals. This is
83 a different license, not a version of the Affero GPL, but Affero has
87 a different license, not a version of the Affero GPL, but Affero has
84 released a new version of the Affero GPL which permits relicensing under
88 released a new version of the Affero GPL which permits relicensing under
85 this license.
89 this license.
86
90
87 The precise terms and conditions for copying, distribution and
91 The precise terms and conditions for copying, distribution and
88 modification follow.
92 modification follow.
89
93
90 TERMS AND CONDITIONS
94 TERMS AND CONDITIONS
91
95
92 0. Definitions.
96 0. Definitions.
93
97
94 "This License" refers to version 3 of the GNU Affero General Public License.
98 "This License" refers to version 3 of the GNU Affero General Public License.
95
99
96 "Copyright" also means copyright-like laws that apply to other kinds of
100 "Copyright" also means copyright-like laws that apply to other kinds of
97 works, such as semiconductor masks.
101 works, such as semiconductor masks.
98
102
99 "The Program" refers to any copyrightable work licensed under this
103 "The Program" refers to any copyrightable work licensed under this
100 License. Each licensee is addressed as "you". "Licensees" and
104 License. Each licensee is addressed as "you". "Licensees" and
101 "recipients" may be individuals or organizations.
105 "recipients" may be individuals or organizations.
102
106
103 To "modify" a work means to copy from or adapt all or part of the work
107 To "modify" a work means to copy from or adapt all or part of the work
104 in a fashion requiring copyright permission, other than the making of an
108 in a fashion requiring copyright permission, other than the making of an
105 exact copy. The resulting work is called a "modified version" of the
109 exact copy. The resulting work is called a "modified version" of the
106 earlier work or a work "based on" the earlier work.
110 earlier work or a work "based on" the earlier work.
107
111
108 A "covered work" means either the unmodified Program or a work based
112 A "covered work" means either the unmodified Program or a work based
109 on the Program.
113 on the Program.
110
114
111 To "propagate" a work means to do anything with it that, without
115 To "propagate" a work means to do anything with it that, without
112 permission, would make you directly or secondarily liable for
116 permission, would make you directly or secondarily liable for
113 infringement under applicable copyright law, except executing it on a
117 infringement under applicable copyright law, except executing it on a
114 computer or modifying a private copy. Propagation includes copying,
118 computer or modifying a private copy. Propagation includes copying,
115 distribution (with or without modification), making available to the
119 distribution (with or without modification), making available to the
116 public, and in some countries other activities as well.
120 public, and in some countries other activities as well.
117
121
118 To "convey" a work means any kind of propagation that enables other
122 To "convey" a work means any kind of propagation that enables other
119 parties to make or receive copies. Mere interaction with a user through
123 parties to make or receive copies. Mere interaction with a user through
120 a computer network, with no transfer of a copy, is not conveying.
124 a computer network, with no transfer of a copy, is not conveying.
121
125
122 An interactive user interface displays "Appropriate Legal Notices"
126 An interactive user interface displays "Appropriate Legal Notices"
123 to the extent that it includes a convenient and prominently visible
127 to the extent that it includes a convenient and prominently visible
124 feature that (1) displays an appropriate copyright notice, and (2)
128 feature that (1) displays an appropriate copyright notice, and (2)
125 tells the user that there is no warranty for the work (except to the
129 tells the user that there is no warranty for the work (except to the
126 extent that warranties are provided), that licensees may convey the
130 extent that warranties are provided), that licensees may convey the
127 work under this License, and how to view a copy of this License. If
131 work under this License, and how to view a copy of this License. If
128 the interface presents a list of user commands or options, such as a
132 the interface presents a list of user commands or options, such as a
129 menu, a prominent item in the list meets this criterion.
133 menu, a prominent item in the list meets this criterion.
130
134
131 1. Source Code.
135 1. Source Code.
132
136
133 The "source code" for a work means the preferred form of the work
137 The "source code" for a work means the preferred form of the work
134 for making modifications to it. "Object code" means any non-source
138 for making modifications to it. "Object code" means any non-source
135 form of a work.
139 form of a work.
136
140
137 A "Standard Interface" means an interface that either is an official
141 A "Standard Interface" means an interface that either is an official
138 standard defined by a recognized standards body, or, in the case of
142 standard defined by a recognized standards body, or, in the case of
139 interfaces specified for a particular programming language, one that
143 interfaces specified for a particular programming language, one that
140 is widely used among developers working in that language.
144 is widely used among developers working in that language.
141
145
142 The "System Libraries" of an executable work include anything, other
146 The "System Libraries" of an executable work include anything, other
143 than the work as a whole, that (a) is included in the normal form of
147 than the work as a whole, that (a) is included in the normal form of
144 packaging a Major Component, but which is not part of that Major
148 packaging a Major Component, but which is not part of that Major
145 Component, and (b) serves only to enable use of the work with that
149 Component, and (b) serves only to enable use of the work with that
146 Major Component, or to implement a Standard Interface for which an
150 Major Component, or to implement a Standard Interface for which an
147 implementation is available to the public in source code form. A
151 implementation is available to the public in source code form. A
148 "Major Component", in this context, means a major essential component
152 "Major Component", in this context, means a major essential component
149 (kernel, window system, and so on) of the specific operating system
153 (kernel, window system, and so on) of the specific operating system
150 (if any) on which the executable work runs, or a compiler used to
154 (if any) on which the executable work runs, or a compiler used to
151 produce the work, or an object code interpreter used to run it.
155 produce the work, or an object code interpreter used to run it.
152
156
153 The "Corresponding Source" for a work in object code form means all
157 The "Corresponding Source" for a work in object code form means all
154 the source code needed to generate, install, and (for an executable
158 the source code needed to generate, install, and (for an executable
155 work) run the object code and to modify the work, including scripts to
159 work) run the object code and to modify the work, including scripts to
156 control those activities. However, it does not include the work's
160 control those activities. However, it does not include the work's
157 System Libraries, or general-purpose tools or generally available free
161 System Libraries, or general-purpose tools or generally available free
158 programs which are used unmodified in performing those activities but
162 programs which are used unmodified in performing those activities but
159 which are not part of the work. For example, Corresponding Source
163 which are not part of the work. For example, Corresponding Source
160 includes interface definition files associated with source files for
164 includes interface definition files associated with source files for
161 the work, and the source code for shared libraries and dynamically
165 the work, and the source code for shared libraries and dynamically
162 linked subprograms that the work is specifically designed to require,
166 linked subprograms that the work is specifically designed to require,
163 such as by intimate data communication or control flow between those
167 such as by intimate data communication or control flow between those
164 subprograms and other parts of the work.
168 subprograms and other parts of the work.
165
169
166 The Corresponding Source need not include anything that users
170 The Corresponding Source need not include anything that users
167 can regenerate automatically from other parts of the Corresponding
171 can regenerate automatically from other parts of the Corresponding
168 Source.
172 Source.
169
173
170 The Corresponding Source for a work in source code form is that
174 The Corresponding Source for a work in source code form is that
171 same work.
175 same work.
172
176
173 2. Basic Permissions.
177 2. Basic Permissions.
174
178
175 All rights granted under this License are granted for the term of
179 All rights granted under this License are granted for the term of
176 copyright on the Program, and are irrevocable provided the stated
180 copyright on the Program, and are irrevocable provided the stated
177 conditions are met. This License explicitly affirms your unlimited
181 conditions are met. This License explicitly affirms your unlimited
178 permission to run the unmodified Program. The output from running a
182 permission to run the unmodified Program. The output from running a
179 covered work is covered by this License only if the output, given its
183 covered work is covered by this License only if the output, given its
180 content, constitutes a covered work. This License acknowledges your
184 content, constitutes a covered work. This License acknowledges your
181 rights of fair use or other equivalent, as provided by copyright law.
185 rights of fair use or other equivalent, as provided by copyright law.
182
186
183 You may make, run and propagate covered works that you do not
187 You may make, run and propagate covered works that you do not
184 convey, without conditions so long as your license otherwise remains
188 convey, without conditions so long as your license otherwise remains
185 in force. You may convey covered works to others for the sole purpose
189 in force. You may convey covered works to others for the sole purpose
186 of having them make modifications exclusively for you, or provide you
190 of having them make modifications exclusively for you, or provide you
187 with facilities for running those works, provided that you comply with
191 with facilities for running those works, provided that you comply with
188 the terms of this License in conveying all material for which you do
192 the terms of this License in conveying all material for which you do
189 not control copyright. Those thus making or running the covered works
193 not control copyright. Those thus making or running the covered works
190 for you must do so exclusively on your behalf, under your direction
194 for you must do so exclusively on your behalf, under your direction
191 and control, on terms that prohibit them from making any copies of
195 and control, on terms that prohibit them from making any copies of
192 your copyrighted material outside their relationship with you.
196 your copyrighted material outside their relationship with you.
193
197
194 Conveying under any other circumstances is permitted solely under
198 Conveying under any other circumstances is permitted solely under
195 the conditions stated below. Sublicensing is not allowed; section 10
199 the conditions stated below. Sublicensing is not allowed; section 10
196 makes it unnecessary.
200 makes it unnecessary.
197
201
198 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
202 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
199
203
200 No covered work shall be deemed part of an effective technological
204 No covered work shall be deemed part of an effective technological
201 measure under any applicable law fulfilling obligations under article
205 measure under any applicable law fulfilling obligations under article
202 11 of the WIPO copyright treaty adopted on 20 December 1996, or
206 11 of the WIPO copyright treaty adopted on 20 December 1996, or
203 similar laws prohibiting or restricting circumvention of such
207 similar laws prohibiting or restricting circumvention of such
204 measures.
208 measures.
205
209
206 When you convey a covered work, you waive any legal power to forbid
210 When you convey a covered work, you waive any legal power to forbid
207 circumvention of technological measures to the extent such circumvention
211 circumvention of technological measures to the extent such circumvention
208 is effected by exercising rights under this License with respect to
212 is effected by exercising rights under this License with respect to
209 the covered work, and you disclaim any intention to limit operation or
213 the covered work, and you disclaim any intention to limit operation or
210 modification of the work as a means of enforcing, against the work's
214 modification of the work as a means of enforcing, against the work's
211 users, your or third parties' legal rights to forbid circumvention of
215 users, your or third parties' legal rights to forbid circumvention of
212 technological measures.
216 technological measures.
213
217
214 4. Conveying Verbatim Copies.
218 4. Conveying Verbatim Copies.
215
219
216 You may convey verbatim copies of the Program's source code as you
220 You may convey verbatim copies of the Program's source code as you
217 receive it, in any medium, provided that you conspicuously and
221 receive it, in any medium, provided that you conspicuously and
218 appropriately publish on each copy an appropriate copyright notice;
222 appropriately publish on each copy an appropriate copyright notice;
219 keep intact all notices stating that this License and any
223 keep intact all notices stating that this License and any
220 non-permissive terms added in accord with section 7 apply to the code;
224 non-permissive terms added in accord with section 7 apply to the code;
221 keep intact all notices of the absence of any warranty; and give all
225 keep intact all notices of the absence of any warranty; and give all
222 recipients a copy of this License along with the Program.
226 recipients a copy of this License along with the Program.
223
227
224 You may charge any price or no price for each copy that you convey,
228 You may charge any price or no price for each copy that you convey,
225 and you may offer support or warranty protection for a fee.
229 and you may offer support or warranty protection for a fee.
226
230
227 5. Conveying Modified Source Versions.
231 5. Conveying Modified Source Versions.
228
232
229 You may convey a work based on the Program, or the modifications to
233 You may convey a work based on the Program, or the modifications to
230 produce it from the Program, in the form of source code under the
234 produce it from the Program, in the form of source code under the
231 terms of section 4, provided that you also meet all of these conditions:
235 terms of section 4, provided that you also meet all of these conditions:
232
236
233 a) The work must carry prominent notices stating that you modified
237 a) The work must carry prominent notices stating that you modified
234 it, and giving a relevant date.
238 it, and giving a relevant date.
235
239
236 b) The work must carry prominent notices stating that it is
240 b) The work must carry prominent notices stating that it is
237 released under this License and any conditions added under section
241 released under this License and any conditions added under section
238 7. This requirement modifies the requirement in section 4 to
242 7. This requirement modifies the requirement in section 4 to
239 "keep intact all notices".
243 "keep intact all notices".
240
244
241 c) You must license the entire work, as a whole, under this
245 c) You must license the entire work, as a whole, under this
242 License to anyone who comes into possession of a copy. This
246 License to anyone who comes into possession of a copy. This
243 License will therefore apply, along with any applicable section 7
247 License will therefore apply, along with any applicable section 7
244 additional terms, to the whole of the work, and all its parts,
248 additional terms, to the whole of the work, and all its parts,
245 regardless of how they are packaged. This License gives no
249 regardless of how they are packaged. This License gives no
246 permission to license the work in any other way, but it does not
250 permission to license the work in any other way, but it does not
247 invalidate such permission if you have separately received it.
251 invalidate such permission if you have separately received it.
248
252
249 d) If the work has interactive user interfaces, each must display
253 d) If the work has interactive user interfaces, each must display
250 Appropriate Legal Notices; however, if the Program has interactive
254 Appropriate Legal Notices; however, if the Program has interactive
251 interfaces that do not display Appropriate Legal Notices, your
255 interfaces that do not display Appropriate Legal Notices, your
252 work need not make them do so.
256 work need not make them do so.
253
257
254 A compilation of a covered work with other separate and independent
258 A compilation of a covered work with other separate and independent
255 works, which are not by their nature extensions of the covered work,
259 works, which are not by their nature extensions of the covered work,
256 and which are not combined with it such as to form a larger program,
260 and which are not combined with it such as to form a larger program,
257 in or on a volume of a storage or distribution medium, is called an
261 in or on a volume of a storage or distribution medium, is called an
258 "aggregate" if the compilation and its resulting copyright are not
262 "aggregate" if the compilation and its resulting copyright are not
259 used to limit the access or legal rights of the compilation's users
263 used to limit the access or legal rights of the compilation's users
260 beyond what the individual works permit. Inclusion of a covered work
264 beyond what the individual works permit. Inclusion of a covered work
261 in an aggregate does not cause this License to apply to the other
265 in an aggregate does not cause this License to apply to the other
262 parts of the aggregate.
266 parts of the aggregate.
263
267
264 6. Conveying Non-Source Forms.
268 6. Conveying Non-Source Forms.
265
269
266 You may convey a covered work in object code form under the terms
270 You may convey a covered work in object code form under the terms
267 of sections 4 and 5, provided that you also convey the
271 of sections 4 and 5, provided that you also convey the
268 machine-readable Corresponding Source under the terms of this License,
272 machine-readable Corresponding Source under the terms of this License,
269 in one of these ways:
273 in one of these ways:
270
274
271 a) Convey the object code in, or embodied in, a physical product
275 a) Convey the object code in, or embodied in, a physical product
272 (including a physical distribution medium), accompanied by the
276 (including a physical distribution medium), accompanied by the
273 Corresponding Source fixed on a durable physical medium
277 Corresponding Source fixed on a durable physical medium
274 customarily used for software interchange.
278 customarily used for software interchange.
275
279
276 b) Convey the object code in, or embodied in, a physical product
280 b) Convey the object code in, or embodied in, a physical product
277 (including a physical distribution medium), accompanied by a
281 (including a physical distribution medium), accompanied by a
278 written offer, valid for at least three years and valid for as
282 written offer, valid for at least three years and valid for as
279 long as you offer spare parts or customer support for that product
283 long as you offer spare parts or customer support for that product
280 model, to give anyone who possesses the object code either (1) a
284 model, to give anyone who possesses the object code either (1) a
281 copy of the Corresponding Source for all the software in the
285 copy of the Corresponding Source for all the software in the
282 product that is covered by this License, on a durable physical
286 product that is covered by this License, on a durable physical
283 medium customarily used for software interchange, for a price no
287 medium customarily used for software interchange, for a price no
284 more than your reasonable cost of physically performing this
288 more than your reasonable cost of physically performing this
285 conveying of source, or (2) access to copy the
289 conveying of source, or (2) access to copy the
286 Corresponding Source from a network server at no charge.
290 Corresponding Source from a network server at no charge.
287
291
288 c) Convey individual copies of the object code with a copy of the
292 c) Convey individual copies of the object code with a copy of the
289 written offer to provide the Corresponding Source. This
293 written offer to provide the Corresponding Source. This
290 alternative is allowed only occasionally and noncommercially, and
294 alternative is allowed only occasionally and noncommercially, and
291 only if you received the object code with such an offer, in accord
295 only if you received the object code with such an offer, in accord
292 with subsection 6b.
296 with subsection 6b.
293
297
294 d) Convey the object code by offering access from a designated
298 d) Convey the object code by offering access from a designated
295 place (gratis or for a charge), and offer equivalent access to the
299 place (gratis or for a charge), and offer equivalent access to the
296 Corresponding Source in the same way through the same place at no
300 Corresponding Source in the same way through the same place at no
297 further charge. You need not require recipients to copy the
301 further charge. You need not require recipients to copy the
298 Corresponding Source along with the object code. If the place to
302 Corresponding Source along with the object code. If the place to
299 copy the object code is a network server, the Corresponding Source
303 copy the object code is a network server, the Corresponding Source
300 may be on a different server (operated by you or a third party)
304 may be on a different server (operated by you or a third party)
301 that supports equivalent copying facilities, provided you maintain
305 that supports equivalent copying facilities, provided you maintain
302 clear directions next to the object code saying where to find the
306 clear directions next to the object code saying where to find the
303 Corresponding Source. Regardless of what server hosts the
307 Corresponding Source. Regardless of what server hosts the
304 Corresponding Source, you remain obligated to ensure that it is
308 Corresponding Source, you remain obligated to ensure that it is
305 available for as long as needed to satisfy these requirements.
309 available for as long as needed to satisfy these requirements.
306
310
307 e) Convey the object code using peer-to-peer transmission, provided
311 e) Convey the object code using peer-to-peer transmission, provided
308 you inform other peers where the object code and Corresponding
312 you inform other peers where the object code and Corresponding
309 Source of the work are being offered to the general public at no
313 Source of the work are being offered to the general public at no
310 charge under subsection 6d.
314 charge under subsection 6d.
311
315
312 A separable portion of the object code, whose source code is excluded
316 A separable portion of the object code, whose source code is excluded
313 from the Corresponding Source as a System Library, need not be
317 from the Corresponding Source as a System Library, need not be
314 included in conveying the object code work.
318 included in conveying the object code work.
315
319
316 A "User Product" is either (1) a "consumer product", which means any
320 A "User Product" is either (1) a "consumer product", which means any
317 tangible personal property which is normally used for personal, family,
321 tangible personal property which is normally used for personal, family,
318 or household purposes, or (2) anything designed or sold for incorporation
322 or household purposes, or (2) anything designed or sold for incorporation
319 into a dwelling. In determining whether a product is a consumer product,
323 into a dwelling. In determining whether a product is a consumer product,
320 doubtful cases shall be resolved in favor of coverage. For a particular
324 doubtful cases shall be resolved in favor of coverage. For a particular
321 product received by a particular user, "normally used" refers to a
325 product received by a particular user, "normally used" refers to a
322 typical or common use of that class of product, regardless of the status
326 typical or common use of that class of product, regardless of the status
323 of the particular user or of the way in which the particular user
327 of the particular user or of the way in which the particular user
324 actually uses, or expects or is expected to use, the product. A product
328 actually uses, or expects or is expected to use, the product. A product
325 is a consumer product regardless of whether the product has substantial
329 is a consumer product regardless of whether the product has substantial
326 commercial, industrial or non-consumer uses, unless such uses represent
330 commercial, industrial or non-consumer uses, unless such uses represent
327 the only significant mode of use of the product.
331 the only significant mode of use of the product.
328
332
329 "Installation Information" for a User Product means any methods,
333 "Installation Information" for a User Product means any methods,
330 procedures, authorization keys, or other information required to install
334 procedures, authorization keys, or other information required to install
331 and execute modified versions of a covered work in that User Product from
335 and execute modified versions of a covered work in that User Product from
332 a modified version of its Corresponding Source. The information must
336 a modified version of its Corresponding Source. The information must
333 suffice to ensure that the continued functioning of the modified object
337 suffice to ensure that the continued functioning of the modified object
334 code is in no case prevented or interfered with solely because
338 code is in no case prevented or interfered with solely because
335 modification has been made.
339 modification has been made.
336
340
337 If you convey an object code work under this section in, or with, or
341 If you convey an object code work under this section in, or with, or
338 specifically for use in, a User Product, and the conveying occurs as
342 specifically for use in, a User Product, and the conveying occurs as
339 part of a transaction in which the right of possession and use of the
343 part of a transaction in which the right of possession and use of the
340 User Product is transferred to the recipient in perpetuity or for a
344 User Product is transferred to the recipient in perpetuity or for a
341 fixed term (regardless of how the transaction is characterized), the
345 fixed term (regardless of how the transaction is characterized), the
342 Corresponding Source conveyed under this section must be accompanied
346 Corresponding Source conveyed under this section must be accompanied
343 by the Installation Information. But this requirement does not apply
347 by the Installation Information. But this requirement does not apply
344 if neither you nor any third party retains the ability to install
348 if neither you nor any third party retains the ability to install
345 modified object code on the User Product (for example, the work has
349 modified object code on the User Product (for example, the work has
346 been installed in ROM).
350 been installed in ROM).
347
351
348 The requirement to provide Installation Information does not include a
352 The requirement to provide Installation Information does not include a
349 requirement to continue to provide support service, warranty, or updates
353 requirement to continue to provide support service, warranty, or updates
350 for a work that has been modified or installed by the recipient, or for
354 for a work that has been modified or installed by the recipient, or for
351 the User Product in which it has been modified or installed. Access to a
355 the User Product in which it has been modified or installed. Access to a
352 network may be denied when the modification itself materially and
356 network may be denied when the modification itself materially and
353 adversely affects the operation of the network or violates the rules and
357 adversely affects the operation of the network or violates the rules and
354 protocols for communication across the network.
358 protocols for communication across the network.
355
359
356 Corresponding Source conveyed, and Installation Information provided,
360 Corresponding Source conveyed, and Installation Information provided,
357 in accord with this section must be in a format that is publicly
361 in accord with this section must be in a format that is publicly
358 documented (and with an implementation available to the public in
362 documented (and with an implementation available to the public in
359 source code form), and must require no special password or key for
363 source code form), and must require no special password or key for
360 unpacking, reading or copying.
364 unpacking, reading or copying.
361
365
362 7. Additional Terms.
366 7. Additional Terms.
363
367
364 "Additional permissions" are terms that supplement the terms of this
368 "Additional permissions" are terms that supplement the terms of this
365 License by making exceptions from one or more of its conditions.
369 License by making exceptions from one or more of its conditions.
366 Additional permissions that are applicable to the entire Program shall
370 Additional permissions that are applicable to the entire Program shall
367 be treated as though they were included in this License, to the extent
371 be treated as though they were included in this License, to the extent
368 that they are valid under applicable law. If additional permissions
372 that they are valid under applicable law. If additional permissions
369 apply only to part of the Program, that part may be used separately
373 apply only to part of the Program, that part may be used separately
370 under those permissions, but the entire Program remains governed by
374 under those permissions, but the entire Program remains governed by
371 this License without regard to the additional permissions.
375 this License without regard to the additional permissions.
372
376
373 When you convey a copy of a covered work, you may at your option
377 When you convey a copy of a covered work, you may at your option
374 remove any additional permissions from that copy, or from any part of
378 remove any additional permissions from that copy, or from any part of
375 it. (Additional permissions may be written to require their own
379 it. (Additional permissions may be written to require their own
376 removal in certain cases when you modify the work.) You may place
380 removal in certain cases when you modify the work.) You may place
377 additional permissions on material, added by you to a covered work,
381 additional permissions on material, added by you to a covered work,
378 for which you have or can give appropriate copyright permission.
382 for which you have or can give appropriate copyright permission.
379
383
380 Notwithstanding any other provision of this License, for material you
384 Notwithstanding any other provision of this License, for material you
381 add to a covered work, you may (if authorized by the copyright holders of
385 add to a covered work, you may (if authorized by the copyright holders of
382 that material) supplement the terms of this License with terms:
386 that material) supplement the terms of this License with terms:
383
387
384 a) Disclaiming warranty or limiting liability differently from the
388 a) Disclaiming warranty or limiting liability differently from the
385 terms of sections 15 and 16 of this License; or
389 terms of sections 15 and 16 of this License; or
386
390
387 b) Requiring preservation of specified reasonable legal notices or
391 b) Requiring preservation of specified reasonable legal notices or
388 author attributions in that material or in the Appropriate Legal
392 author attributions in that material or in the Appropriate Legal
389 Notices displayed by works containing it; or
393 Notices displayed by works containing it; or
390
394
391 c) Prohibiting misrepresentation of the origin of that material, or
395 c) Prohibiting misrepresentation of the origin of that material, or
392 requiring that modified versions of such material be marked in
396 requiring that modified versions of such material be marked in
393 reasonable ways as different from the original version; or
397 reasonable ways as different from the original version; or
394
398
395 d) Limiting the use for publicity purposes of names of licensors or
399 d) Limiting the use for publicity purposes of names of licensors or
396 authors of the material; or
400 authors of the material; or
397
401
398 e) Declining to grant rights under trademark law for use of some
402 e) Declining to grant rights under trademark law for use of some
399 trade names, trademarks, or service marks; or
403 trade names, trademarks, or service marks; or
400
404
401 f) Requiring indemnification of licensors and authors of that
405 f) Requiring indemnification of licensors and authors of that
402 material by anyone who conveys the material (or modified versions of
406 material by anyone who conveys the material (or modified versions of
403 it) with contractual assumptions of liability to the recipient, for
407 it) with contractual assumptions of liability to the recipient, for
404 any liability that these contractual assumptions directly impose on
408 any liability that these contractual assumptions directly impose on
405 those licensors and authors.
409 those licensors and authors.
406
410
407 All other non-permissive additional terms are considered "further
411 All other non-permissive additional terms are considered "further
408 restrictions" within the meaning of section 10. If the Program as you
412 restrictions" within the meaning of section 10. If the Program as you
409 received it, or any part of it, contains a notice stating that it is
413 received it, or any part of it, contains a notice stating that it is
410 governed by this License along with a term that is a further
414 governed by this License along with a term that is a further
411 restriction, you may remove that term. If a license document contains
415 restriction, you may remove that term. If a license document contains
412 a further restriction but permits relicensing or conveying under this
416 a further restriction but permits relicensing or conveying under this
413 License, you may add to a covered work material governed by the terms
417 License, you may add to a covered work material governed by the terms
414 of that license document, provided that the further restriction does
418 of that license document, provided that the further restriction does
415 not survive such relicensing or conveying.
419 not survive such relicensing or conveying.
416
420
417 If you add terms to a covered work in accord with this section, you
421 If you add terms to a covered work in accord with this section, you
418 must place, in the relevant source files, a statement of the
422 must place, in the relevant source files, a statement of the
419 additional terms that apply to those files, or a notice indicating
423 additional terms that apply to those files, or a notice indicating
420 where to find the applicable terms.
424 where to find the applicable terms.
421
425
422 Additional terms, permissive or non-permissive, may be stated in the
426 Additional terms, permissive or non-permissive, may be stated in the
423 form of a separately written license, or stated as exceptions;
427 form of a separately written license, or stated as exceptions;
424 the above requirements apply either way.
428 the above requirements apply either way.
425
429
426 8. Termination.
430 8. Termination.
427
431
428 You may not propagate or modify a covered work except as expressly
432 You may not propagate or modify a covered work except as expressly
429 provided under this License. Any attempt otherwise to propagate or
433 provided under this License. Any attempt otherwise to propagate or
430 modify it is void, and will automatically terminate your rights under
434 modify it is void, and will automatically terminate your rights under
431 this License (including any patent licenses granted under the third
435 this License (including any patent licenses granted under the third
432 paragraph of section 11).
436 paragraph of section 11).
433
437
434 However, if you cease all violation of this License, then your
438 However, if you cease all violation of this License, then your
435 license from a particular copyright holder is reinstated (a)
439 license from a particular copyright holder is reinstated (a)
436 provisionally, unless and until the copyright holder explicitly and
440 provisionally, unless and until the copyright holder explicitly and
437 finally terminates your license, and (b) permanently, if the copyright
441 finally terminates your license, and (b) permanently, if the copyright
438 holder fails to notify you of the violation by some reasonable means
442 holder fails to notify you of the violation by some reasonable means
439 prior to 60 days after the cessation.
443 prior to 60 days after the cessation.
440
444
441 Moreover, your license from a particular copyright holder is
445 Moreover, your license from a particular copyright holder is
442 reinstated permanently if the copyright holder notifies you of the
446 reinstated permanently if the copyright holder notifies you of the
443 violation by some reasonable means, this is the first time you have
447 violation by some reasonable means, this is the first time you have
444 received notice of violation of this License (for any work) from that
448 received notice of violation of this License (for any work) from that
445 copyright holder, and you cure the violation prior to 30 days after
449 copyright holder, and you cure the violation prior to 30 days after
446 your receipt of the notice.
450 your receipt of the notice.
447
451
448 Termination of your rights under this section does not terminate the
452 Termination of your rights under this section does not terminate the
449 licenses of parties who have received copies or rights from you under
453 licenses of parties who have received copies or rights from you under
450 this License. If your rights have been terminated and not permanently
454 this License. If your rights have been terminated and not permanently
451 reinstated, you do not qualify to receive new licenses for the same
455 reinstated, you do not qualify to receive new licenses for the same
452 material under section 10.
456 material under section 10.
453
457
454 9. Acceptance Not Required for Having Copies.
458 9. Acceptance Not Required for Having Copies.
455
459
456 You are not required to accept this License in order to receive or
460 You are not required to accept this License in order to receive or
457 run a copy of the Program. Ancillary propagation of a covered work
461 run a copy of the Program. Ancillary propagation of a covered work
458 occurring solely as a consequence of using peer-to-peer transmission
462 occurring solely as a consequence of using peer-to-peer transmission
459 to receive a copy likewise does not require acceptance. However,
463 to receive a copy likewise does not require acceptance. However,
460 nothing other than this License grants you permission to propagate or
464 nothing other than this License grants you permission to propagate or
461 modify any covered work. These actions infringe copyright if you do
465 modify any covered work. These actions infringe copyright if you do
462 not accept this License. Therefore, by modifying or propagating a
466 not accept this License. Therefore, by modifying or propagating a
463 covered work, you indicate your acceptance of this License to do so.
467 covered work, you indicate your acceptance of this License to do so.
464
468
465 10. Automatic Licensing of Downstream Recipients.
469 10. Automatic Licensing of Downstream Recipients.
466
470
467 Each time you convey a covered work, the recipient automatically
471 Each time you convey a covered work, the recipient automatically
468 receives a license from the original licensors, to run, modify and
472 receives a license from the original licensors, to run, modify and
469 propagate that work, subject to this License. You are not responsible
473 propagate that work, subject to this License. You are not responsible
470 for enforcing compliance by third parties with this License.
474 for enforcing compliance by third parties with this License.
471
475
472 An "entity transaction" is a transaction transferring control of an
476 An "entity transaction" is a transaction transferring control of an
473 organization, or substantially all assets of one, or subdividing an
477 organization, or substantially all assets of one, or subdividing an
474 organization, or merging organizations. If propagation of a covered
478 organization, or merging organizations. If propagation of a covered
475 work results from an entity transaction, each party to that
479 work results from an entity transaction, each party to that
476 transaction who receives a copy of the work also receives whatever
480 transaction who receives a copy of the work also receives whatever
477 licenses to the work the party's predecessor in interest had or could
481 licenses to the work the party's predecessor in interest had or could
478 give under the previous paragraph, plus a right to possession of the
482 give under the previous paragraph, plus a right to possession of the
479 Corresponding Source of the work from the predecessor in interest, if
483 Corresponding Source of the work from the predecessor in interest, if
480 the predecessor has it or can get it with reasonable efforts.
484 the predecessor has it or can get it with reasonable efforts.
481
485
482 You may not impose any further restrictions on the exercise of the
486 You may not impose any further restrictions on the exercise of the
483 rights granted or affirmed under this License. For example, you may
487 rights granted or affirmed under this License. For example, you may
484 not impose a license fee, royalty, or other charge for exercise of
488 not impose a license fee, royalty, or other charge for exercise of
485 rights granted under this License, and you may not initiate litigation
489 rights granted under this License, and you may not initiate litigation
486 (including a cross-claim or counterclaim in a lawsuit) alleging that
490 (including a cross-claim or counterclaim in a lawsuit) alleging that
487 any patent claim is infringed by making, using, selling, offering for
491 any patent claim is infringed by making, using, selling, offering for
488 sale, or importing the Program or any portion of it.
492 sale, or importing the Program or any portion of it.
489
493
490 11. Patents.
494 11. Patents.
491
495
492 A "contributor" is a copyright holder who authorizes use under this
496 A "contributor" is a copyright holder who authorizes use under this
493 License of the Program or a work on which the Program is based. The
497 License of the Program or a work on which the Program is based. The
494 work thus licensed is called the contributor's "contributor version".
498 work thus licensed is called the contributor's "contributor version".
495
499
496 A contributor's "essential patent claims" are all patent claims
500 A contributor's "essential patent claims" are all patent claims
497 owned or controlled by the contributor, whether already acquired or
501 owned or controlled by the contributor, whether already acquired or
498 hereafter acquired, that would be infringed by some manner, permitted
502 hereafter acquired, that would be infringed by some manner, permitted
499 by this License, of making, using, or selling its contributor version,
503 by this License, of making, using, or selling its contributor version,
500 but do not include claims that would be infringed only as a
504 but do not include claims that would be infringed only as a
501 consequence of further modification of the contributor version. For
505 consequence of further modification of the contributor version. For
502 purposes of this definition, "control" includes the right to grant
506 purposes of this definition, "control" includes the right to grant
503 patent sublicenses in a manner consistent with the requirements of
507 patent sublicenses in a manner consistent with the requirements of
504 this License.
508 this License.
505
509
506 Each contributor grants you a non-exclusive, worldwide, royalty-free
510 Each contributor grants you a non-exclusive, worldwide, royalty-free
507 patent license under the contributor's essential patent claims, to
511 patent license under the contributor's essential patent claims, to
508 make, use, sell, offer for sale, import and otherwise run, modify and
512 make, use, sell, offer for sale, import and otherwise run, modify and
509 propagate the contents of its contributor version.
513 propagate the contents of its contributor version.
510
514
511 In the following three paragraphs, a "patent license" is any express
515 In the following three paragraphs, a "patent license" is any express
512 agreement or commitment, however denominated, not to enforce a patent
516 agreement or commitment, however denominated, not to enforce a patent
513 (such as an express permission to practice a patent or covenant not to
517 (such as an express permission to practice a patent or covenant not to
514 sue for patent infringement). To "grant" such a patent license to a
518 sue for patent infringement). To "grant" such a patent license to a
515 party means to make such an agreement or commitment not to enforce a
519 party means to make such an agreement or commitment not to enforce a
516 patent against the party.
520 patent against the party.
517
521
518 If you convey a covered work, knowingly relying on a patent license,
522 If you convey a covered work, knowingly relying on a patent license,
519 and the Corresponding Source of the work is not available for anyone
523 and the Corresponding Source of the work is not available for anyone
520 to copy, free of charge and under the terms of this License, through a
524 to copy, free of charge and under the terms of this License, through a
521 publicly available network server or other readily accessible means,
525 publicly available network server or other readily accessible means,
522 then you must either (1) cause the Corresponding Source to be so
526 then you must either (1) cause the Corresponding Source to be so
523 available, or (2) arrange to deprive yourself of the benefit of the
527 available, or (2) arrange to deprive yourself of the benefit of the
524 patent license for this particular work, or (3) arrange, in a manner
528 patent license for this particular work, or (3) arrange, in a manner
525 consistent with the requirements of this License, to extend the patent
529 consistent with the requirements of this License, to extend the patent
526 license to downstream recipients. "Knowingly relying" means you have
530 license to downstream recipients. "Knowingly relying" means you have
527 actual knowledge that, but for the patent license, your conveying the
531 actual knowledge that, but for the patent license, your conveying the
528 covered work in a country, or your recipient's use of the covered work
532 covered work in a country, or your recipient's use of the covered work
529 in a country, would infringe one or more identifiable patents in that
533 in a country, would infringe one or more identifiable patents in that
530 country that you have reason to believe are valid.
534 country that you have reason to believe are valid.
531
535
532 If, pursuant to or in connection with a single transaction or
536 If, pursuant to or in connection with a single transaction or
533 arrangement, you convey, or propagate by procuring conveyance of, a
537 arrangement, you convey, or propagate by procuring conveyance of, a
534 covered work, and grant a patent license to some of the parties
538 covered work, and grant a patent license to some of the parties
535 receiving the covered work authorizing them to use, propagate, modify
539 receiving the covered work authorizing them to use, propagate, modify
536 or convey a specific copy of the covered work, then the patent license
540 or convey a specific copy of the covered work, then the patent license
537 you grant is automatically extended to all recipients of the covered
541 you grant is automatically extended to all recipients of the covered
538 work and works based on it.
542 work and works based on it.
539
543
540 A patent license is "discriminatory" if it does not include within
544 A patent license is "discriminatory" if it does not include within
541 the scope of its coverage, prohibits the exercise of, or is
545 the scope of its coverage, prohibits the exercise of, or is
542 conditioned on the non-exercise of one or more of the rights that are
546 conditioned on the non-exercise of one or more of the rights that are
543 specifically granted under this License. You may not convey a covered
547 specifically granted under this License. You may not convey a covered
544 work if you are a party to an arrangement with a third party that is
548 work if you are a party to an arrangement with a third party that is
545 in the business of distributing software, under which you make payment
549 in the business of distributing software, under which you make payment
546 to the third party based on the extent of your activity of conveying
550 to the third party based on the extent of your activity of conveying
547 the work, and under which the third party grants, to any of the
551 the work, and under which the third party grants, to any of the
548 parties who would receive the covered work from you, a discriminatory
552 parties who would receive the covered work from you, a discriminatory
549 patent license (a) in connection with copies of the covered work
553 patent license (a) in connection with copies of the covered work
550 conveyed by you (or copies made from those copies), or (b) primarily
554 conveyed by you (or copies made from those copies), or (b) primarily
551 for and in connection with specific products or compilations that
555 for and in connection with specific products or compilations that
552 contain the covered work, unless you entered into that arrangement,
556 contain the covered work, unless you entered into that arrangement,
553 or that patent license was granted, prior to 28 March 2007.
557 or that patent license was granted, prior to 28 March 2007.
554
558
555 Nothing in this License shall be construed as excluding or limiting
559 Nothing in this License shall be construed as excluding or limiting
556 any implied license or other defenses to infringement that may
560 any implied license or other defenses to infringement that may
557 otherwise be available to you under applicable patent law.
561 otherwise be available to you under applicable patent law.
558
562
559 12. No Surrender of Others' Freedom.
563 12. No Surrender of Others' Freedom.
560
564
561 If conditions are imposed on you (whether by court order, agreement or
565 If conditions are imposed on you (whether by court order, agreement or
562 otherwise) that contradict the conditions of this License, they do not
566 otherwise) that contradict the conditions of this License, they do not
563 excuse you from the conditions of this License. If you cannot convey a
567 excuse you from the conditions of this License. If you cannot convey a
564 covered work so as to satisfy simultaneously your obligations under this
568 covered work so as to satisfy simultaneously your obligations under this
565 License and any other pertinent obligations, then as a consequence you may
569 License and any other pertinent obligations, then as a consequence you may
566 not convey it at all. For example, if you agree to terms that obligate you
570 not convey it at all. For example, if you agree to terms that obligate you
567 to collect a royalty for further conveying from those to whom you convey
571 to collect a royalty for further conveying from those to whom you convey
568 the Program, the only way you could satisfy both those terms and this
572 the Program, the only way you could satisfy both those terms and this
569 License would be to refrain entirely from conveying the Program.
573 License would be to refrain entirely from conveying the Program.
570
574
571 13. Remote Network Interaction; Use with the GNU General Public License.
575 13. Remote Network Interaction; Use with the GNU General Public License.
572
576
573 Notwithstanding any other provision of this License, if you modify the
577 Notwithstanding any other provision of this License, if you modify the
574 Program, your modified version must prominently offer all users
578 Program, your modified version must prominently offer all users
575 interacting with it remotely through a computer network (if your version
579 interacting with it remotely through a computer network (if your version
576 supports such interaction) an opportunity to receive the Corresponding
580 supports such interaction) an opportunity to receive the Corresponding
577 Source of your version by providing access to the Corresponding Source
581 Source of your version by providing access to the Corresponding Source
578 from a network server at no charge, through some standard or customary
582 from a network server at no charge, through some standard or customary
579 means of facilitating copying of software. This Corresponding Source
583 means of facilitating copying of software. This Corresponding Source
580 shall include the Corresponding Source for any work covered by version 3
584 shall include the Corresponding Source for any work covered by version 3
581 of the GNU General Public License that is incorporated pursuant to the
585 of the GNU General Public License that is incorporated pursuant to the
582 following paragraph.
586 following paragraph.
583
587
584 Notwithstanding any other provision of this License, you have
588 Notwithstanding any other provision of this License, you have
585 permission to link or combine any covered work with a work licensed
589 permission to link or combine any covered work with a work licensed
586 under version 3 of the GNU General Public License into a single
590 under version 3 of the GNU General Public License into a single
587 combined work, and to convey the resulting work. The terms of this
591 combined work, and to convey the resulting work. The terms of this
588 License will continue to apply to the part which is the covered work,
592 License will continue to apply to the part which is the covered work,
589 but the work with which it is combined will remain governed by version
593 but the work with which it is combined will remain governed by version
590 3 of the GNU General Public License.
594 3 of the GNU General Public License.
591
595
592 14. Revised Versions of this License.
596 14. Revised Versions of this License.
593
597
594 The Free Software Foundation may publish revised and/or new versions of
598 The Free Software Foundation may publish revised and/or new versions of
595 the GNU Affero General Public License from time to time. Such new versions
599 the GNU Affero General Public License from time to time. Such new versions
596 will be similar in spirit to the present version, but may differ in detail to
600 will be similar in spirit to the present version, but may differ in detail to
597 address new problems or concerns.
601 address new problems or concerns.
598
602
599 Each version is given a distinguishing version number. If the
603 Each version is given a distinguishing version number. If the
600 Program specifies that a certain numbered version of the GNU Affero General
604 Program specifies that a certain numbered version of the GNU Affero General
601 Public License "or any later version" applies to it, you have the
605 Public License "or any later version" applies to it, you have the
602 option of following the terms and conditions either of that numbered
606 option of following the terms and conditions either of that numbered
603 version or of any later version published by the Free Software
607 version or of any later version published by the Free Software
604 Foundation. If the Program does not specify a version number of the
608 Foundation. If the Program does not specify a version number of the
605 GNU Affero General Public License, you may choose any version ever published
609 GNU Affero General Public License, you may choose any version ever published
606 by the Free Software Foundation.
610 by the Free Software Foundation.
607
611
608 If the Program specifies that a proxy can decide which future
612 If the Program specifies that a proxy can decide which future
609 versions of the GNU Affero General Public License can be used, that proxy's
613 versions of the GNU Affero General Public License can be used, that proxy's
610 public statement of acceptance of a version permanently authorizes you
614 public statement of acceptance of a version permanently authorizes you
611 to choose that version for the Program.
615 to choose that version for the Program.
612
616
613 Later license versions may give you additional or different
617 Later license versions may give you additional or different
614 permissions. However, no additional obligations are imposed on any
618 permissions. However, no additional obligations are imposed on any
615 author or copyright holder as a result of your choosing to follow a
619 author or copyright holder as a result of your choosing to follow a
616 later version.
620 later version.
617
621
618 15. Disclaimer of Warranty.
622 15. Disclaimer of Warranty.
619
623
620 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
624 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
621 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
625 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
622 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
626 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
623 OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
627 OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
624 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
628 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
625 PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
629 PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
626 IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
630 IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
627 ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
631 ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
628
632
629 16. Limitation of Liability.
633 16. Limitation of Liability.
630
634
631 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
635 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
632 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
636 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
633 THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
637 THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
634 GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
638 GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
635 USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
639 USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
636 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
640 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
637 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
641 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
638 EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
642 EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
639 SUCH DAMAGES.
643 SUCH DAMAGES.
640
644
641 17. Interpretation of Sections 15 and 16.
645 17. Interpretation of Sections 15 and 16.
642
646
643 If the disclaimer of warranty and limitation of liability provided
647 If the disclaimer of warranty and limitation of liability provided
644 above cannot be given local legal effect according to their terms,
648 above cannot be given local legal effect according to their terms,
645 reviewing courts shall apply local law that most closely approximates
649 reviewing courts shall apply local law that most closely approximates
646 an absolute waiver of all civil liability in connection with the
650 an absolute waiver of all civil liability in connection with the
647 Program, unless a warranty or assumption of liability accompanies a
651 Program, unless a warranty or assumption of liability accompanies a
648 copy of the Program in return for a fee.
652 copy of the Program in return for a fee.
649
653
650 END OF TERMS AND CONDITIONS
654 END OF TERMS AND CONDITIONS
651
655
652 How to Apply These Terms to Your New Programs
656 How to Apply These Terms to Your New Programs
653
657
654 If you develop a new program, and you want it to be of the greatest
658 If you develop a new program, and you want it to be of the greatest
655 possible use to the public, the best way to achieve this is to make it
659 possible use to the public, the best way to achieve this is to make it
656 free software which everyone can redistribute and change under these terms.
660 free software which everyone can redistribute and change under these terms.
657
661
658 To do so, attach the following notices to the program. It is safest
662 To do so, attach the following notices to the program. It is safest
659 to attach them to the start of each source file to most effectively
663 to attach them to the start of each source file to most effectively
660 state the exclusion of warranty; and each file should have at least
664 state the exclusion of warranty; and each file should have at least
661 the "copyright" line and a pointer to where the full notice is found.
665 the "copyright" line and a pointer to where the full notice is found.
662
666
663 <one line to give the program's name and a brief idea of what it does.>
667 <one line to give the program's name and a brief idea of what it does.>
664 Copyright (C) <year> <name of author>
668 Copyright (C) <year> <name of author>
665
669
666 This program is free software: you can redistribute it and/or modify
670 This program is free software: you can redistribute it and/or modify
667 it under the terms of the GNU Affero General Public License as published by
671 it under the terms of the GNU Affero General Public License as published by
668 the Free Software Foundation, either version 3 of the License, or
672 the Free Software Foundation, either version 3 of the License, or
669 (at your option) any later version.
673 (at your option) any later version.
670
674
671 This program is distributed in the hope that it will be useful,
675 This program is distributed in the hope that it will be useful,
672 but WITHOUT ANY WARRANTY; without even the implied warranty of
676 but WITHOUT ANY WARRANTY; without even the implied warranty of
673 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
677 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
674 GNU Affero General Public License for more details.
678 GNU Affero General Public License for more details.
675
679
676 You should have received a copy of the GNU Affero General Public License
680 You should have received a copy of the GNU Affero General Public License
677 along with this program. If not, see <http://www.gnu.org/licenses/>.
681 along with this program. If not, see <http://www.gnu.org/licenses/>.
678
682
679 Also add information on how to contact you by electronic and paper mail.
683 Also add information on how to contact you by electronic and paper mail.
680
684
681 If your software can interact with users remotely through a computer
685 If your software can interact with users remotely through a computer
682 network, you should also make sure that it provides a way for users to
686 network, you should also make sure that it provides a way for users to
683 get its source. For example, if your program is a web application, its
687 get its source. For example, if your program is a web application, its
684 interface could display a "Source" link that leads users to an archive
688 interface could display a "Source" link that leads users to an archive
685 of the code. There are many ways you could offer source, and different
689 of the code. There are many ways you could offer source, and different
686 solutions will be better for different programs; see section 13 for the
690 solutions will be better for different programs; see section 13 for the
687 specific requirements.
691 specific requirements.
688
692
689 You should also get your employer (if you work as a programmer) or school,
693 You should also get your employer (if you work as a programmer) or school,
690 if any, to sign a "copyright disclaimer" for the program, if necessary.
694 if any, to sign a "copyright disclaimer" for the program, if necessary.
691 For more information on this, and how to apply and follow the GNU AGPL, see
695 For more information on this, and how to apply and follow the GNU AGPL, see
692 <http://www.gnu.org/licenses/>.
696 <http://www.gnu.org/licenses/>.
@@ -1,47 +1,39 b''
1
1
2 WEBPACK=./node_modules/webpack/bin/webpack.js
2 WEBPACK=./node_modules/webpack/bin/webpack.js
3 GRUNT=grunt
3 GRUNT=grunt
4 NODE_PATH=./node_modules
4 NODE_PATH=./node_modules
5 FLAKE8=flake8 setup.py pytest_pylons/ rhodecode/ --select=E124 --ignore=E711,E712,E510,E121,E122,E126,E127,E128,E501,F401 --max-line-length=100 --exclude=*rhodecode/lib/dbmigrate/*,*rhodecode/tests/*,*rhodecode/lib/vcs/utils/*
6 CI_PREFIX=enterprise
5 CI_PREFIX=enterprise
7
6
8 .PHONY: docs docs-clean ci-docs clean test test-clean test-lint test-only
7 .PHONY: docs docs-clean ci-docs clean test test-clean test-lint test-only
9
8
10
9
11 docs:
10 docs:
12 (cd docs; nix-build default.nix -o result; make clean html)
11 (cd docs; nix-build default.nix -o result; make clean html)
13
12
14 docs-clean:
13 docs-clean:
15 (cd docs; make clean)
14 (cd docs; make clean)
16
15
17 ci-docs: docs;
16 ci-docs: docs;
18
17
19
18
20 clean: test-clean
19 clean: test-clean
21 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' \) -exec rm '{}' ';'
20 find . -type f \( -iname '*.c' -o -iname '*.pyc' -o -iname '*.so' \) -exec rm '{}' ';'
22
21
23 test: test-clean test-only
22 test: test-clean test-only
24
23
25 test-clean:
24 test-clean:
26 rm -rf coverage.xml htmlcov junit.xml pylint.log result
25 rm -rf coverage.xml htmlcov junit.xml pylint.log result
27
26
28 test-lint:
29 if [ "$$IN_NIX_SHELL" = "1" ]; then \
30 $(FLAKE8); \
31 else \
32 $(FLAKE8) --format=pylint --exit-zero > pylint.log; \
33 fi
34
35 test-only:
27 test-only:
36 PYTHONHASHSEED=random py.test -vv -r xw --cov=rhodecode --cov-report=term-missing --cov-report=html rhodecode/tests/
28 PYTHONHASHSEED=random py.test -vv -r xw --cov=rhodecode --cov-report=term-missing --cov-report=html rhodecode/tests/
37
29
38 web-build:
30 web-build:
39 NODE_PATH=$(NODE_PATH) $(GRUNT)
31 NODE_PATH=$(NODE_PATH) $(GRUNT)
40
32
41 web-test:
33 web-test:
42 @echo "no test for our javascript, yet!"
34 @echo "no test for our javascript, yet!"
43
35
44 docs-bootstrap:
36 docs-bootstrap:
45 (cd docs; nix-build default.nix -o result)
37 (cd docs; nix-build default.nix -o result)
46 @echo "Please go to docs folder and run make html"
38 @echo "Please go to docs folder and run make html"
47
39
@@ -1,15 +1,17 b''
1 {
1 {
2 "name": "rhodecode-elements",
2 "name": "rhodecode-elements",
3 "description": "User interface for elements for rhodecode",
3 "description": "User interface for elements for rhodecode",
4 "main": "index.html",
4 "main": "index.html",
5 "dependencies": {
5 "dependencies": {
6 "webcomponentsjs": "^0.7.22",
6 "webcomponentsjs": "^0.7.22",
7 "polymer": "Polymer/polymer#^1.6.1",
7 "polymer": "Polymer/polymer#^1.6.1",
8 "paper-button": "PolymerElements/paper-button#^1.0.13",
8 "paper-button": "PolymerElements/paper-button#^1.0.13",
9 "paper-spinner": "PolymerElements/paper-spinner#^1.2.0",
9 "paper-spinner": "PolymerElements/paper-spinner#^1.2.0",
10 "paper-tooltip": "PolymerElements/paper-tooltip#^1.1.2",
10 "paper-tooltip": "PolymerElements/paper-tooltip#^1.1.2",
11 "paper-toast": "PolymerElements/paper-toast#^1.3.0",
11 "paper-toast": "PolymerElements/paper-toast#^1.3.0",
12 "paper-toggle-button": "PolymerElements/paper-toggle-button#^1.2.0",
12 "paper-toggle-button": "PolymerElements/paper-toggle-button#^1.2.0",
13 "iron-ajax": "PolymerElements/iron-ajax#^1.4.3"
13 "iron-ajax": "PolymerElements/iron-ajax#^1.4.3",
14 "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^1.0.13",
15 "iron-a11y-keys": "PolymerElements/iron-a11y-keys#^1.0.6"
14 }
16 }
15 }
17 }
@@ -1,674 +1,679 b''
1
1
2
2
3 ################################################################################
3 ################################################################################
4 ## RHODECODE ENTERPRISE CONFIGURATION ##
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
5 # The %(here)s variable will be replaced with the parent directory of this file#
5 # The %(here)s variable will be replaced with the parent directory of this file#
6 ################################################################################
6 ################################################################################
7
7
8 [DEFAULT]
8 [DEFAULT]
9 debug = true
9 debug = true
10
10
11 ################################################################################
11 ################################################################################
12 ## EMAIL CONFIGURATION ##
12 ## EMAIL CONFIGURATION ##
13 ## Uncomment and replace with the email address which should receive ##
13 ## Uncomment and replace with the email address which should receive ##
14 ## any error reports after an application crash ##
14 ## any error reports after an application crash ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
16 ################################################################################
16 ################################################################################
17
17
18 ## prefix all emails subjects with given prefix, helps filtering out emails
18 ## prefix all emails subjects with given prefix, helps filtering out emails
19 #email_prefix = [RhodeCode]
19 #email_prefix = [RhodeCode]
20
20
21 ## email FROM address all mails will be sent
21 ## email FROM address all mails will be sent
22 #app_email_from = rhodecode-noreply@localhost
22 #app_email_from = rhodecode-noreply@localhost
23
23
24 ## Uncomment and replace with the address which should receive any error report
24 ## Uncomment and replace with the address which should receive any error report
25 ## note: using appenlight for error handling doesn't need this to be uncommented
25 ## note: using appenlight for error handling doesn't need this to be uncommented
26 #email_to = admin@localhost
26 #email_to = admin@localhost
27
27
28 ## in case of Application errors, sent an error email form
28 ## in case of Application errors, sent an error email form
29 #error_email_from = rhodecode_error@localhost
29 #error_email_from = rhodecode_error@localhost
30
30
31 ## additional error message to be send in case of server crash
31 ## additional error message to be send in case of server crash
32 #error_message =
32 #error_message =
33
33
34
34
35 #smtp_server = mail.server.com
35 #smtp_server = mail.server.com
36 #smtp_username =
36 #smtp_username =
37 #smtp_password =
37 #smtp_password =
38 #smtp_port =
38 #smtp_port =
39 #smtp_use_tls = false
39 #smtp_use_tls = false
40 #smtp_use_ssl = true
40 #smtp_use_ssl = true
41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
42 #smtp_auth =
42 #smtp_auth =
43
43
44 [server:main]
44 [server:main]
45 ## COMMON ##
45 ## COMMON ##
46 host = 127.0.0.1
46 host = 127.0.0.1
47 port = 5000
47 port = 5000
48
48
49 ##################################
49 ##################################
50 ## WAITRESS WSGI SERVER ##
50 ## WAITRESS WSGI SERVER ##
51 ## Recommended for Development ##
51 ## Recommended for Development ##
52 ##################################
52 ##################################
53
53
54 use = egg:waitress#main
54 use = egg:waitress#main
55 ## number of worker threads
55 ## number of worker threads
56 threads = 5
56 threads = 5
57 ## MAX BODY SIZE 100GB
57 ## MAX BODY SIZE 100GB
58 max_request_body_size = 107374182400
58 max_request_body_size = 107374182400
59 ## Use poll instead of select, fixes file descriptors limits problems.
59 ## Use poll instead of select, fixes file descriptors limits problems.
60 ## May not work on old windows systems.
60 ## May not work on old windows systems.
61 asyncore_use_poll = true
61 asyncore_use_poll = true
62
62
63
63
64 ##########################
64 ##########################
65 ## GUNICORN WSGI SERVER ##
65 ## GUNICORN WSGI SERVER ##
66 ##########################
66 ##########################
67 ## run with gunicorn --log-config <inifile.ini> --paste <inifile.ini>
67 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
68
68
69 #use = egg:gunicorn#main
69 #use = egg:gunicorn#main
70 ## Sets the number of process workers. You must set `instance_id = *`
70 ## Sets the number of process workers. You must set `instance_id = *`
71 ## when this option is set to more than one worker, recommended
71 ## when this option is set to more than one worker, recommended
72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
73 ## The `instance_id = *` must be set in the [app:main] section below
73 ## The `instance_id = *` must be set in the [app:main] section below
74 #workers = 2
74 #workers = 2
75 ## number of threads for each of the worker, must be set to 1 for gevent
75 ## number of threads for each of the worker, must be set to 1 for gevent
76 ## generally recommened to be at 1
76 ## generally recommened to be at 1
77 #threads = 1
77 #threads = 1
78 ## process name
78 ## process name
79 #proc_name = rhodecode
79 #proc_name = rhodecode
80 ## type of worker class, one of sync, gevent
80 ## type of worker class, one of sync, gevent
81 ## recommended for bigger setup is using of of other than sync one
81 ## recommended for bigger setup is using of of other than sync one
82 #worker_class = sync
82 #worker_class = sync
83 ## The maximum number of simultaneous clients. Valid only for Gevent
83 ## The maximum number of simultaneous clients. Valid only for Gevent
84 #worker_connections = 10
84 #worker_connections = 10
85 ## max number of requests that worker will handle before being gracefully
85 ## max number of requests that worker will handle before being gracefully
86 ## restarted, could prevent memory leaks
86 ## restarted, could prevent memory leaks
87 #max_requests = 1000
87 #max_requests = 1000
88 #max_requests_jitter = 30
88 #max_requests_jitter = 30
89 ## amount of time a worker can spend with handling a request before it
89 ## amount of time a worker can spend with handling a request before it
90 ## gets killed and restarted. Set to 6hrs
90 ## gets killed and restarted. Set to 6hrs
91 #timeout = 21600
91 #timeout = 21600
92
92
93
93
94 ## prefix middleware for RhodeCode, disables force_https flag.
94 ## prefix middleware for RhodeCode.
95 ## recommended when using proxy setup.
95 ## recommended when using proxy setup.
96 ## allows to set RhodeCode under a prefix in server.
96 ## allows to set RhodeCode under a prefix in server.
97 ## eg https://server.com/<prefix>. Enable `filter-with =` option below as well.
97 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
98 ## optionally set prefix like: `prefix = /<your-prefix>`
98 ## And set your prefix like: `prefix = /custom_prefix`
99 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
100 ## to make your cookies only work on prefix url
99 [filter:proxy-prefix]
101 [filter:proxy-prefix]
100 use = egg:PasteDeploy#prefix
102 use = egg:PasteDeploy#prefix
101 prefix = /
103 prefix = /
102
104
103 [app:main]
105 [app:main]
104 use = egg:rhodecode-enterprise-ce
106 use = egg:rhodecode-enterprise-ce
105
107
106 ## enable proxy prefix middleware, defined above
108 ## enable proxy prefix middleware, defined above
107 #filter-with = proxy-prefix
109 #filter-with = proxy-prefix
108
110
109 # During development the we want to have the debug toolbar enabled
111 # During development the we want to have the debug toolbar enabled
110 pyramid.includes =
112 pyramid.includes =
111 pyramid_debugtoolbar
113 pyramid_debugtoolbar
112 rhodecode.utils.debugtoolbar
114 rhodecode.utils.debugtoolbar
113 rhodecode.lib.middleware.request_wrapper
115 rhodecode.lib.middleware.request_wrapper
114
116
115 pyramid.reload_templates = true
117 pyramid.reload_templates = true
116
118
117 debugtoolbar.hosts = 0.0.0.0/0
119 debugtoolbar.hosts = 0.0.0.0/0
118 debugtoolbar.exclude_prefixes =
120 debugtoolbar.exclude_prefixes =
119 /css
121 /css
120 /fonts
122 /fonts
121 /images
123 /images
122 /js
124 /js
123
125
124 ## RHODECODE PLUGINS ##
126 ## RHODECODE PLUGINS ##
125 rhodecode.includes =
127 rhodecode.includes =
126 rhodecode.api
128 rhodecode.api
127
129
128
130
129 # api prefix url
131 # api prefix url
130 rhodecode.api.url = /_admin/api
132 rhodecode.api.url = /_admin/api
131
133
132
134
133 ## END RHODECODE PLUGINS ##
135 ## END RHODECODE PLUGINS ##
134
136
135 ## encryption key used to encrypt social plugin tokens,
137 ## encryption key used to encrypt social plugin tokens,
136 ## remote_urls with credentials etc, if not set it defaults to
138 ## remote_urls with credentials etc, if not set it defaults to
137 ## `beaker.session.secret`
139 ## `beaker.session.secret`
138 #rhodecode.encrypted_values.secret =
140 #rhodecode.encrypted_values.secret =
139
141
140 ## decryption strict mode (enabled by default). It controls if decryption raises
142 ## decryption strict mode (enabled by default). It controls if decryption raises
141 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
143 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
142 #rhodecode.encrypted_values.strict = false
144 #rhodecode.encrypted_values.strict = false
143
145
144 ## return gzipped responses from Rhodecode (static files/application)
146 ## return gzipped responses from Rhodecode (static files/application)
145 gzip_responses = false
147 gzip_responses = false
146
148
147 ## autogenerate javascript routes file on startup
149 ## autogenerate javascript routes file on startup
148 generate_js_files = false
150 generate_js_files = false
149
151
150 ## Optional Languages
152 ## Optional Languages
151 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
153 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
152 lang = en
154 lang = en
153
155
154 ## perform a full repository scan on each server start, this should be
156 ## perform a full repository scan on each server start, this should be
155 ## set to false after first startup, to allow faster server restarts.
157 ## set to false after first startup, to allow faster server restarts.
156 startup.import_repos = false
158 startup.import_repos = false
157
159
158 ## Uncomment and set this path to use archive download cache.
160 ## Uncomment and set this path to use archive download cache.
159 ## Once enabled, generated archives will be cached at this location
161 ## Once enabled, generated archives will be cached at this location
160 ## and served from the cache during subsequent requests for the same archive of
162 ## and served from the cache during subsequent requests for the same archive of
161 ## the repository.
163 ## the repository.
162 #archive_cache_dir = /tmp/tarballcache
164 #archive_cache_dir = /tmp/tarballcache
163
165
164 ## change this to unique ID for security
166 ## change this to unique ID for security
165 app_instance_uuid = rc-production
167 app_instance_uuid = rc-production
166
168
167 ## cut off limit for large diffs (size in bytes)
169 ## cut off limit for large diffs (size in bytes)
168 cut_off_limit_diff = 1024000
170 cut_off_limit_diff = 1024000
169 cut_off_limit_file = 256000
171 cut_off_limit_file = 256000
170
172
171 ## use cache version of scm repo everywhere
173 ## use cache version of scm repo everywhere
172 vcs_full_cache = true
174 vcs_full_cache = true
173
175
174 ## force https in RhodeCode, fixes https redirects, assumes it's always https
176 ## force https in RhodeCode, fixes https redirects, assumes it's always https
175 ## Normally this is controlled by proper http flags sent from http server
177 ## Normally this is controlled by proper http flags sent from http server
176 force_https = false
178 force_https = false
177
179
178 ## use Strict-Transport-Security headers
180 ## use Strict-Transport-Security headers
179 use_htsts = false
181 use_htsts = false
180
182
181 ## number of commits stats will parse on each iteration
183 ## number of commits stats will parse on each iteration
182 commit_parse_limit = 25
184 commit_parse_limit = 25
183
185
184 ## git rev filter option, --all is the default filter, if you need to
186 ## git rev filter option, --all is the default filter, if you need to
185 ## hide all refs in changelog switch this to --branches --tags
187 ## hide all refs in changelog switch this to --branches --tags
186 git_rev_filter = --branches --tags
188 git_rev_filter = --branches --tags
187
189
188 # Set to true if your repos are exposed using the dumb protocol
190 # Set to true if your repos are exposed using the dumb protocol
189 git_update_server_info = false
191 git_update_server_info = false
190
192
191 ## RSS/ATOM feed options
193 ## RSS/ATOM feed options
192 rss_cut_off_limit = 256000
194 rss_cut_off_limit = 256000
193 rss_items_per_page = 10
195 rss_items_per_page = 10
194 rss_include_diff = false
196 rss_include_diff = false
195
197
196 ## gist URL alias, used to create nicer urls for gist. This should be an
198 ## gist URL alias, used to create nicer urls for gist. This should be an
197 ## url that does rewrites to _admin/gists/<gistid>.
199 ## url that does rewrites to _admin/gists/{gistid}.
198 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
200 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
199 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
201 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
200 gist_alias_url =
202 gist_alias_url =
201
203
202 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
204 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
203 ## used for access.
205 ## used for access.
204 ## Adding ?auth_token = <token> to the url authenticates this request as if it
206 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
205 ## came from the the logged in user who own this authentication token.
207 ## came from the the logged in user who own this authentication token.
206 ##
208 ##
207 ## Syntax is <ControllerClass>:<function_pattern>.
209 ## Syntax is ControllerClass:function_pattern.
208 ## To enable access to raw_files put `FilesController:raw`.
210 ## To enable access to raw_files put `FilesController:raw`.
209 ## To enable access to patches add `ChangesetController:changeset_patch`.
211 ## To enable access to patches add `ChangesetController:changeset_patch`.
210 ## The list should be "," separated and on a single line.
212 ## The list should be "," separated and on a single line.
211 ##
213 ##
212 ## Recommended controllers to enable:
214 ## Recommended controllers to enable:
213 # ChangesetController:changeset_patch,
215 # ChangesetController:changeset_patch,
214 # ChangesetController:changeset_raw,
216 # ChangesetController:changeset_raw,
215 # FilesController:raw,
217 # FilesController:raw,
216 # FilesController:archivefile,
218 # FilesController:archivefile,
217 # GistsController:*,
219 # GistsController:*,
218 api_access_controllers_whitelist =
220 api_access_controllers_whitelist =
219
221
220 ## default encoding used to convert from and to unicode
222 ## default encoding used to convert from and to unicode
221 ## can be also a comma separated list of encoding in case of mixed encodings
223 ## can be also a comma separated list of encoding in case of mixed encodings
222 default_encoding = UTF-8
224 default_encoding = UTF-8
223
225
224 ## instance-id prefix
226 ## instance-id prefix
225 ## a prefix key for this instance used for cache invalidation when running
227 ## a prefix key for this instance used for cache invalidation when running
226 ## multiple instances of rhodecode, make sure it's globally unique for
228 ## multiple instances of rhodecode, make sure it's globally unique for
227 ## all running rhodecode instances. Leave empty if you don't use it
229 ## all running rhodecode instances. Leave empty if you don't use it
228 instance_id =
230 instance_id =
229
231
230 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
232 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
231 ## of an authentication plugin also if it is disabled by it's settings.
233 ## of an authentication plugin also if it is disabled by it's settings.
232 ## This could be useful if you are unable to log in to the system due to broken
234 ## This could be useful if you are unable to log in to the system due to broken
233 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
235 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
234 ## module to log in again and fix the settings.
236 ## module to log in again and fix the settings.
235 ##
237 ##
236 ## Available builtin plugin IDs (hash is part of the ID):
238 ## Available builtin plugin IDs (hash is part of the ID):
237 ## egg:rhodecode-enterprise-ce#rhodecode
239 ## egg:rhodecode-enterprise-ce#rhodecode
238 ## egg:rhodecode-enterprise-ce#pam
240 ## egg:rhodecode-enterprise-ce#pam
239 ## egg:rhodecode-enterprise-ce#ldap
241 ## egg:rhodecode-enterprise-ce#ldap
240 ## egg:rhodecode-enterprise-ce#jasig_cas
242 ## egg:rhodecode-enterprise-ce#jasig_cas
241 ## egg:rhodecode-enterprise-ce#headers
243 ## egg:rhodecode-enterprise-ce#headers
242 ## egg:rhodecode-enterprise-ce#crowd
244 ## egg:rhodecode-enterprise-ce#crowd
243 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
245 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
244
246
245 ## alternative return HTTP header for failed authentication. Default HTTP
247 ## alternative return HTTP header for failed authentication. Default HTTP
246 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
248 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
247 ## handling that causing a series of failed authentication calls.
249 ## handling that causing a series of failed authentication calls.
248 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
250 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
249 ## This will be served instead of default 401 on bad authnetication
251 ## This will be served instead of default 401 on bad authnetication
250 auth_ret_code =
252 auth_ret_code =
251
253
252 ## use special detection method when serving auth_ret_code, instead of serving
254 ## use special detection method when serving auth_ret_code, instead of serving
253 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
255 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
254 ## and then serve auth_ret_code to clients
256 ## and then serve auth_ret_code to clients
255 auth_ret_code_detection = false
257 auth_ret_code_detection = false
256
258
257 ## locking return code. When repository is locked return this HTTP code. 2XX
259 ## locking return code. When repository is locked return this HTTP code. 2XX
258 ## codes don't break the transactions while 4XX codes do
260 ## codes don't break the transactions while 4XX codes do
259 lock_ret_code = 423
261 lock_ret_code = 423
260
262
261 ## allows to change the repository location in settings page
263 ## allows to change the repository location in settings page
262 allow_repo_location_change = true
264 allow_repo_location_change = true
263
265
264 ## allows to setup custom hooks in settings page
266 ## allows to setup custom hooks in settings page
265 allow_custom_hooks_settings = true
267 allow_custom_hooks_settings = true
266
268
267 ## generated license token, goto license page in RhodeCode settings to obtain
269 ## generated license token, goto license page in RhodeCode settings to obtain
268 ## new token
270 ## new token
269 license_token =
271 license_token =
270
272
271 ## supervisor connection uri, for managing supervisor and logs.
273 ## supervisor connection uri, for managing supervisor and logs.
272 supervisor.uri =
274 supervisor.uri =
273 ## supervisord group name/id we only want this RC instance to handle
275 ## supervisord group name/id we only want this RC instance to handle
274 supervisor.group_id = dev
276 supervisor.group_id = dev
275
277
276 ## Display extended labs settings
278 ## Display extended labs settings
277 labs_settings_active = true
279 labs_settings_active = true
278
280
279 ####################################
281 ####################################
280 ### CELERY CONFIG ####
282 ### CELERY CONFIG ####
281 ####################################
283 ####################################
282 use_celery = false
284 use_celery = false
283 broker.host = localhost
285 broker.host = localhost
284 broker.vhost = rabbitmqhost
286 broker.vhost = rabbitmqhost
285 broker.port = 5672
287 broker.port = 5672
286 broker.user = rabbitmq
288 broker.user = rabbitmq
287 broker.password = qweqwe
289 broker.password = qweqwe
288
290
289 celery.imports = rhodecode.lib.celerylib.tasks
291 celery.imports = rhodecode.lib.celerylib.tasks
290
292
291 celery.result.backend = amqp
293 celery.result.backend = amqp
292 celery.result.dburi = amqp://
294 celery.result.dburi = amqp://
293 celery.result.serialier = json
295 celery.result.serialier = json
294
296
295 #celery.send.task.error.emails = true
297 #celery.send.task.error.emails = true
296 #celery.amqp.task.result.expires = 18000
298 #celery.amqp.task.result.expires = 18000
297
299
298 celeryd.concurrency = 2
300 celeryd.concurrency = 2
299 #celeryd.log.file = celeryd.log
301 #celeryd.log.file = celeryd.log
300 celeryd.log.level = debug
302 celeryd.log.level = debug
301 celeryd.max.tasks.per.child = 1
303 celeryd.max.tasks.per.child = 1
302
304
303 ## tasks will never be sent to the queue, but executed locally instead.
305 ## tasks will never be sent to the queue, but executed locally instead.
304 celery.always.eager = false
306 celery.always.eager = false
305
307
306 ####################################
308 ####################################
307 ### BEAKER CACHE ####
309 ### BEAKER CACHE ####
308 ####################################
310 ####################################
309 # default cache dir for templates. Putting this into a ramdisk
311 # default cache dir for templates. Putting this into a ramdisk
310 ## can boost performance, eg. %(here)s/data_ramdisk
312 ## can boost performance, eg. %(here)s/data_ramdisk
311 cache_dir = %(here)s/data
313 cache_dir = %(here)s/data
312
314
313 ## locking and default file storage for Beaker. Putting this into a ramdisk
315 ## locking and default file storage for Beaker. Putting this into a ramdisk
314 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
316 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
315 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
317 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
316 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
318 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
317
319
318 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
320 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
319
321
320 beaker.cache.super_short_term.type = memory
322 beaker.cache.super_short_term.type = memory
321 beaker.cache.super_short_term.expire = 10
323 beaker.cache.super_short_term.expire = 10
322 beaker.cache.super_short_term.key_length = 256
324 beaker.cache.super_short_term.key_length = 256
323
325
324 beaker.cache.short_term.type = memory
326 beaker.cache.short_term.type = memory
325 beaker.cache.short_term.expire = 60
327 beaker.cache.short_term.expire = 60
326 beaker.cache.short_term.key_length = 256
328 beaker.cache.short_term.key_length = 256
327
329
328 beaker.cache.long_term.type = memory
330 beaker.cache.long_term.type = memory
329 beaker.cache.long_term.expire = 36000
331 beaker.cache.long_term.expire = 36000
330 beaker.cache.long_term.key_length = 256
332 beaker.cache.long_term.key_length = 256
331
333
332 beaker.cache.sql_cache_short.type = memory
334 beaker.cache.sql_cache_short.type = memory
333 beaker.cache.sql_cache_short.expire = 10
335 beaker.cache.sql_cache_short.expire = 10
334 beaker.cache.sql_cache_short.key_length = 256
336 beaker.cache.sql_cache_short.key_length = 256
335
337
336 ## default is memory cache, configure only if required
338 ## default is memory cache, configure only if required
337 ## using multi-node or multi-worker setup
339 ## using multi-node or multi-worker setup
338 #beaker.cache.auth_plugins.type = ext:database
340 #beaker.cache.auth_plugins.type = ext:database
339 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
341 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
340 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
342 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
341 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
343 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
342 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
344 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
343 #beaker.cache.auth_plugins.sa.pool_size = 10
345 #beaker.cache.auth_plugins.sa.pool_size = 10
344 #beaker.cache.auth_plugins.sa.max_overflow = 0
346 #beaker.cache.auth_plugins.sa.max_overflow = 0
345
347
346 beaker.cache.repo_cache_long.type = memorylru_base
348 beaker.cache.repo_cache_long.type = memorylru_base
347 beaker.cache.repo_cache_long.max_items = 4096
349 beaker.cache.repo_cache_long.max_items = 4096
348 beaker.cache.repo_cache_long.expire = 2592000
350 beaker.cache.repo_cache_long.expire = 2592000
349
351
350 ## default is memorylru_base cache, configure only if required
352 ## default is memorylru_base cache, configure only if required
351 ## using multi-node or multi-worker setup
353 ## using multi-node or multi-worker setup
352 #beaker.cache.repo_cache_long.type = ext:memcached
354 #beaker.cache.repo_cache_long.type = ext:memcached
353 #beaker.cache.repo_cache_long.url = localhost:11211
355 #beaker.cache.repo_cache_long.url = localhost:11211
354 #beaker.cache.repo_cache_long.expire = 1209600
356 #beaker.cache.repo_cache_long.expire = 1209600
355 #beaker.cache.repo_cache_long.key_length = 256
357 #beaker.cache.repo_cache_long.key_length = 256
356
358
357 ####################################
359 ####################################
358 ### BEAKER SESSION ####
360 ### BEAKER SESSION ####
359 ####################################
361 ####################################
360
362
361 ## .session.type is type of storage options for the session, current allowed
363 ## .session.type is type of storage options for the session, current allowed
362 ## types are file, ext:memcached, ext:database, and memory (default).
364 ## types are file, ext:memcached, ext:database, and memory (default).
363 beaker.session.type = file
365 beaker.session.type = file
364 beaker.session.data_dir = %(here)s/data/sessions/data
366 beaker.session.data_dir = %(here)s/data/sessions/data
365
367
366 ## db based session, fast, and allows easy management over logged in users
368 ## db based session, fast, and allows easy management over logged in users
367 #beaker.session.type = ext:database
369 #beaker.session.type = ext:database
368 #beaker.session.table_name = db_session
370 #beaker.session.table_name = db_session
369 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
371 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
370 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
372 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
371 #beaker.session.sa.pool_recycle = 3600
373 #beaker.session.sa.pool_recycle = 3600
372 #beaker.session.sa.echo = false
374 #beaker.session.sa.echo = false
373
375
374 beaker.session.key = rhodecode
376 beaker.session.key = rhodecode
375 beaker.session.secret = develop-rc-uytcxaz
377 beaker.session.secret = develop-rc-uytcxaz
376 beaker.session.lock_dir = %(here)s/data/sessions/lock
378 beaker.session.lock_dir = %(here)s/data/sessions/lock
377
379
378 ## Secure encrypted cookie. Requires AES and AES python libraries
380 ## Secure encrypted cookie. Requires AES and AES python libraries
379 ## you must disable beaker.session.secret to use this
381 ## you must disable beaker.session.secret to use this
380 #beaker.session.encrypt_key = <key_for_encryption>
382 #beaker.session.encrypt_key = key_for_encryption
381 #beaker.session.validate_key = <validation_key>
383 #beaker.session.validate_key = validation_key
382
384
383 ## sets session as invalid(also logging out user) if it haven not been
385 ## sets session as invalid(also logging out user) if it haven not been
384 ## accessed for given amount of time in seconds
386 ## accessed for given amount of time in seconds
385 beaker.session.timeout = 2592000
387 beaker.session.timeout = 2592000
386 beaker.session.httponly = true
388 beaker.session.httponly = true
387 ## Path to use for the cookie.
389 ## Path to use for the cookie. Set to prefix if you use prefix middleware
388 #beaker.session.cookie_path = /<your-prefix>
390 #beaker.session.cookie_path = /custom_prefix
389
391
390 ## uncomment for https secure cookie
392 ## uncomment for https secure cookie
391 beaker.session.secure = false
393 beaker.session.secure = false
392
394
393 ## auto save the session to not to use .save()
395 ## auto save the session to not to use .save()
394 beaker.session.auto = false
396 beaker.session.auto = false
395
397
396 ## default cookie expiration time in seconds, set to `true` to set expire
398 ## default cookie expiration time in seconds, set to `true` to set expire
397 ## at browser close
399 ## at browser close
398 #beaker.session.cookie_expires = 3600
400 #beaker.session.cookie_expires = 3600
399
401
400 ###################################
402 ###################################
401 ## SEARCH INDEXING CONFIGURATION ##
403 ## SEARCH INDEXING CONFIGURATION ##
402 ###################################
404 ###################################
403 ## Full text search indexer is available in rhodecode-tools under
405 ## Full text search indexer is available in rhodecode-tools under
404 ## `rhodecode-tools index` command
406 ## `rhodecode-tools index` command
405
407
406 # WHOOSH Backend, doesn't require additional services to run
408 ## WHOOSH Backend, doesn't require additional services to run
407 # it works good with few dozen repos
409 ## it works good with few dozen repos
408 search.module = rhodecode.lib.index.whoosh
410 search.module = rhodecode.lib.index.whoosh
409 search.location = %(here)s/data/index
411 search.location = %(here)s/data/index
410
412
411 ########################################
413 ########################################
412 ### CHANNELSTREAM CONFIG ####
414 ### CHANNELSTREAM CONFIG ####
413 ########################################
415 ########################################
414 ## channelstream enables persistent connections and live notification
416 ## channelstream enables persistent connections and live notification
415 ## in the system. It's also used by the chat system
417 ## in the system. It's also used by the chat system
416
418
417 channelstream.enabled = false
419 channelstream.enabled = false
418 ## location of channelstream server on the backend
420 ## location of channelstream server on the backend
419 channelstream.server = 127.0.0.1:9800
421 channelstream.server = 127.0.0.1:9800
420 ## location of the channelstream server from outside world
422 ## location of the channelstream server from outside world
421 ## most likely this would be an http server special backend URL, that handles
423 ## most likely this would be an http server special backend URL, that handles
422 ## websocket connections see nginx example for config
424 ## websocket connections see nginx example for config
423 # channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
425 # channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
424 ## proxy path that can be used by http daemons for exposing channelstream
426 ## proxy path that can be used by http daemons for exposing channelstream
425 # channelstream.proxy_path = /_channelstream
427 # channelstream.proxy_path = /_channelstream
426 channelstream.secret = secret
428 channelstream.secret = secret
427 channelstream.history.location = %(here)s/channelstream_history
429 channelstream.history.location = %(here)s/channelstream_history
428
430
429
431
430 ###################################
432 ###################################
431 ## APPENLIGHT CONFIG ##
433 ## APPENLIGHT CONFIG ##
432 ###################################
434 ###################################
433
435
434 ## Appenlight is tailored to work with RhodeCode, see
436 ## Appenlight is tailored to work with RhodeCode, see
435 ## http://appenlight.com for details how to obtain an account
437 ## http://appenlight.com for details how to obtain an account
436
438
437 ## appenlight integration enabled
439 ## appenlight integration enabled
438 appenlight = false
440 appenlight = false
439
441
440 appenlight.server_url = https://api.appenlight.com
442 appenlight.server_url = https://api.appenlight.com
441 appenlight.api_key = YOUR_API_KEY
443 appenlight.api_key = YOUR_API_KEY
442 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
444 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
443
445
444 # used for JS client
446 # used for JS client
445 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
447 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
446
448
447 ## TWEAK AMOUNT OF INFO SENT HERE
449 ## TWEAK AMOUNT OF INFO SENT HERE
448
450
449 ## enables 404 error logging (default False)
451 ## enables 404 error logging (default False)
450 appenlight.report_404 = false
452 appenlight.report_404 = false
451
453
452 ## time in seconds after request is considered being slow (default 1)
454 ## time in seconds after request is considered being slow (default 1)
453 appenlight.slow_request_time = 1
455 appenlight.slow_request_time = 1
454
456
455 ## record slow requests in application
457 ## record slow requests in application
456 ## (needs to be enabled for slow datastore recording and time tracking)
458 ## (needs to be enabled for slow datastore recording and time tracking)
457 appenlight.slow_requests = true
459 appenlight.slow_requests = true
458
460
459 ## enable hooking to application loggers
461 ## enable hooking to application loggers
460 appenlight.logging = true
462 appenlight.logging = true
461
463
462 ## minimum log level for log capture
464 ## minimum log level for log capture
463 appenlight.logging.level = WARNING
465 appenlight.logging.level = WARNING
464
466
465 ## send logs only from erroneous/slow requests
467 ## send logs only from erroneous/slow requests
466 ## (saves API quota for intensive logging)
468 ## (saves API quota for intensive logging)
467 appenlight.logging_on_error = false
469 appenlight.logging_on_error = false
468
470
469 ## list of additonal keywords that should be grabbed from environ object
471 ## list of additonal keywords that should be grabbed from environ object
470 ## can be string with comma separated list of words in lowercase
472 ## can be string with comma separated list of words in lowercase
471 ## (by default client will always send following info:
473 ## (by default client will always send following info:
472 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
474 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
473 ## start with HTTP* this list be extended with additional keywords here
475 ## start with HTTP* this list be extended with additional keywords here
474 appenlight.environ_keys_whitelist =
476 appenlight.environ_keys_whitelist =
475
477
476 ## list of keywords that should be blanked from request object
478 ## list of keywords that should be blanked from request object
477 ## can be string with comma separated list of words in lowercase
479 ## can be string with comma separated list of words in lowercase
478 ## (by default client will always blank keys that contain following words
480 ## (by default client will always blank keys that contain following words
479 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
481 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
480 ## this list be extended with additional keywords set here
482 ## this list be extended with additional keywords set here
481 appenlight.request_keys_blacklist =
483 appenlight.request_keys_blacklist =
482
484
483 ## list of namespaces that should be ignores when gathering log entries
485 ## list of namespaces that should be ignores when gathering log entries
484 ## can be string with comma separated list of namespaces
486 ## can be string with comma separated list of namespaces
485 ## (by default the client ignores own entries: appenlight_client.client)
487 ## (by default the client ignores own entries: appenlight_client.client)
486 appenlight.log_namespace_blacklist =
488 appenlight.log_namespace_blacklist =
487
489
488
490
489 ################################################################################
491 ################################################################################
490 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
492 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
491 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
493 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
492 ## execute malicious code after an exception is raised. ##
494 ## execute malicious code after an exception is raised. ##
493 ################################################################################
495 ################################################################################
494 #set debug = false
496 #set debug = false
495
497
496
498
497 ##############
499 ##############
498 ## STYLING ##
500 ## STYLING ##
499 ##############
501 ##############
500 debug_style = true
502 debug_style = true
501
503
502 #########################################################
504 #########################################################
503 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
505 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
504 #########################################################
506 #########################################################
505 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
507 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
506 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
508 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
507 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
509 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
508 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
510 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
509
511
510 # see sqlalchemy docs for other advanced settings
512 # see sqlalchemy docs for other advanced settings
511
513
512 ## print the sql statements to output
514 ## print the sql statements to output
513 sqlalchemy.db1.echo = false
515 sqlalchemy.db1.echo = false
514 ## recycle the connections after this ammount of seconds
516 ## recycle the connections after this amount of seconds
515 sqlalchemy.db1.pool_recycle = 3600
517 sqlalchemy.db1.pool_recycle = 3600
516 sqlalchemy.db1.convert_unicode = true
518 sqlalchemy.db1.convert_unicode = true
517
519
518 ## the number of connections to keep open inside the connection pool.
520 ## the number of connections to keep open inside the connection pool.
519 ## 0 indicates no limit
521 ## 0 indicates no limit
520 #sqlalchemy.db1.pool_size = 5
522 #sqlalchemy.db1.pool_size = 5
521
523
522 ## the number of connections to allow in connection pool "overflow", that is
524 ## the number of connections to allow in connection pool "overflow", that is
523 ## connections that can be opened above and beyond the pool_size setting,
525 ## connections that can be opened above and beyond the pool_size setting,
524 ## which defaults to five.
526 ## which defaults to five.
525 #sqlalchemy.db1.max_overflow = 10
527 #sqlalchemy.db1.max_overflow = 10
526
528
527
529
528 ##################
530 ##################
529 ### VCS CONFIG ###
531 ### VCS CONFIG ###
530 ##################
532 ##################
531 vcs.server.enable = true
533 vcs.server.enable = true
532 vcs.server = localhost:9900
534 vcs.server = localhost:9900
533
535
534 ## Web server connectivity protocol, responsible for web based VCS operatations
536 ## Web server connectivity protocol, responsible for web based VCS operatations
535 ## Available protocols are:
537 ## Available protocols are:
536 ## `pyro4` - using pyro4 server
538 ## `pyro4` - use pyro4 server
537 ## `http` - using http-rpc backend
539 ## `http` - use http-rpc backend (default)
538 vcs.server.protocol = http
540 vcs.server.protocol = http
539
541
540 ## Push/Pull operations protocol, available options are:
542 ## Push/Pull operations protocol, available options are:
541 ## `pyro4` - using pyro4 server
543 ## `pyro4` - use pyro4 server
542 ## `rhodecode.lib.middleware.utils.scm_app_http` - Http based, recommended
544 ## `http` - use http-rpc backend (default)
543 ## `vcsserver.scm_app` - internal app (EE only)
545 ##
544 vcs.scm_app_implementation = rhodecode.lib.middleware.utils.scm_app_http
546 vcs.scm_app_implementation = http
545
547
546 ## Push/Pull operations hooks protocol, available options are:
548 ## Push/Pull operations hooks protocol, available options are:
547 ## `pyro4` - using pyro4 server
549 ## `pyro4` - use pyro4 server
548 ## `http` - using http-rpc backend
550 ## `http` - use http-rpc backend (default)
549 vcs.hooks.protocol = http
551 vcs.hooks.protocol = http
550
552
551 vcs.server.log_level = debug
553 vcs.server.log_level = debug
552 ## Start VCSServer with this instance as a subprocess, usefull for development
554 ## Start VCSServer with this instance as a subprocess, usefull for development
553 vcs.start_server = true
555 vcs.start_server = true
554
556
555 ## List of enabled VCS backends, available options are:
557 ## List of enabled VCS backends, available options are:
556 ## `hg` - mercurial
558 ## `hg` - mercurial
557 ## `git` - git
559 ## `git` - git
558 ## `svn` - subversion
560 ## `svn` - subversion
559 vcs.backends = hg, git, svn
561 vcs.backends = hg, git, svn
560
562
561 vcs.connection_timeout = 3600
563 vcs.connection_timeout = 3600
562 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
564 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
563 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
565 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
564 #vcs.svn.compatible_version = pre-1.8-compatible
566 #vcs.svn.compatible_version = pre-1.8-compatible
565
567
566
568
567 ############################################################
569 ############################################################
568 ### Subversion proxy support (mod_dav_svn) ###
570 ### Subversion proxy support (mod_dav_svn) ###
569 ### Maps RhodeCode repo groups into SVN paths for Apache ###
571 ### Maps RhodeCode repo groups into SVN paths for Apache ###
570 ############################################################
572 ############################################################
571 ## Enable or disable the config file generation.
573 ## Enable or disable the config file generation.
572 svn.proxy.generate_config = false
574 svn.proxy.generate_config = false
573 ## Generate config file with `SVNListParentPath` set to `On`.
575 ## Generate config file with `SVNListParentPath` set to `On`.
574 svn.proxy.list_parent_path = true
576 svn.proxy.list_parent_path = true
575 ## Set location and file name of generated config file.
577 ## Set location and file name of generated config file.
576 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
578 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
577 ## File system path to the directory containing the repositories served by
579 ## Used as a prefix to the `Location` block in the generated config file.
578 ## RhodeCode.
580 ## In most cases it should be set to `/`.
579 svn.proxy.parent_path_root = /path/to/repo_store
580 ## Used as a prefix to the <Location> block in the generated config file. In
581 ## most cases it should be set to `/`.
582 svn.proxy.location_root = /
581 svn.proxy.location_root = /
582 ## Command to reload the mod dav svn configuration on change.
583 ## Example: `/etc/init.d/apache2 reload`
584 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
585 ## If the timeout expires before the reload command finishes, the command will
586 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
587 #svn.proxy.reload_timeout = 10
583
588
584
589
585 ################################
590 ################################
586 ### LOGGING CONFIGURATION ####
591 ### LOGGING CONFIGURATION ####
587 ################################
592 ################################
588 [loggers]
593 [loggers]
589 keys = root, routes, rhodecode, sqlalchemy, beaker, pyro4, templates
594 keys = root, routes, rhodecode, sqlalchemy, beaker, pyro4, templates
590
595
591 [handlers]
596 [handlers]
592 keys = console, console_sql
597 keys = console, console_sql
593
598
594 [formatters]
599 [formatters]
595 keys = generic, color_formatter, color_formatter_sql
600 keys = generic, color_formatter, color_formatter_sql
596
601
597 #############
602 #############
598 ## LOGGERS ##
603 ## LOGGERS ##
599 #############
604 #############
600 [logger_root]
605 [logger_root]
601 level = NOTSET
606 level = NOTSET
602 handlers = console
607 handlers = console
603
608
604 [logger_routes]
609 [logger_routes]
605 level = DEBUG
610 level = DEBUG
606 handlers =
611 handlers =
607 qualname = routes.middleware
612 qualname = routes.middleware
608 ## "level = DEBUG" logs the route matched and routing variables.
613 ## "level = DEBUG" logs the route matched and routing variables.
609 propagate = 1
614 propagate = 1
610
615
611 [logger_beaker]
616 [logger_beaker]
612 level = DEBUG
617 level = DEBUG
613 handlers =
618 handlers =
614 qualname = beaker.container
619 qualname = beaker.container
615 propagate = 1
620 propagate = 1
616
621
617 [logger_pyro4]
622 [logger_pyro4]
618 level = DEBUG
623 level = DEBUG
619 handlers =
624 handlers =
620 qualname = Pyro4
625 qualname = Pyro4
621 propagate = 1
626 propagate = 1
622
627
623 [logger_templates]
628 [logger_templates]
624 level = INFO
629 level = INFO
625 handlers =
630 handlers =
626 qualname = pylons.templating
631 qualname = pylons.templating
627 propagate = 1
632 propagate = 1
628
633
629 [logger_rhodecode]
634 [logger_rhodecode]
630 level = DEBUG
635 level = DEBUG
631 handlers =
636 handlers =
632 qualname = rhodecode
637 qualname = rhodecode
633 propagate = 1
638 propagate = 1
634
639
635 [logger_sqlalchemy]
640 [logger_sqlalchemy]
636 level = INFO
641 level = INFO
637 handlers = console_sql
642 handlers = console_sql
638 qualname = sqlalchemy.engine
643 qualname = sqlalchemy.engine
639 propagate = 0
644 propagate = 0
640
645
641 ##############
646 ##############
642 ## HANDLERS ##
647 ## HANDLERS ##
643 ##############
648 ##############
644
649
645 [handler_console]
650 [handler_console]
646 class = StreamHandler
651 class = StreamHandler
647 args = (sys.stderr,)
652 args = (sys.stderr,)
648 level = DEBUG
653 level = DEBUG
649 formatter = color_formatter
654 formatter = color_formatter
650
655
651 [handler_console_sql]
656 [handler_console_sql]
652 class = StreamHandler
657 class = StreamHandler
653 args = (sys.stderr,)
658 args = (sys.stderr,)
654 level = DEBUG
659 level = DEBUG
655 formatter = color_formatter_sql
660 formatter = color_formatter_sql
656
661
657 ################
662 ################
658 ## FORMATTERS ##
663 ## FORMATTERS ##
659 ################
664 ################
660
665
661 [formatter_generic]
666 [formatter_generic]
662 class = rhodecode.lib.logging_formatter.Pyro4AwareFormatter
667 class = rhodecode.lib.logging_formatter.Pyro4AwareFormatter
663 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
668 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
664 datefmt = %Y-%m-%d %H:%M:%S
669 datefmt = %Y-%m-%d %H:%M:%S
665
670
666 [formatter_color_formatter]
671 [formatter_color_formatter]
667 class = rhodecode.lib.logging_formatter.ColorFormatter
672 class = rhodecode.lib.logging_formatter.ColorFormatter
668 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
673 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
669 datefmt = %Y-%m-%d %H:%M:%S
674 datefmt = %Y-%m-%d %H:%M:%S
670
675
671 [formatter_color_formatter_sql]
676 [formatter_color_formatter_sql]
672 class = rhodecode.lib.logging_formatter.ColorFormatterSql
677 class = rhodecode.lib.logging_formatter.ColorFormatterSql
673 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
678 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
674 datefmt = %Y-%m-%d %H:%M:%S
679 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,643 +1,648 b''
1
1
2
2
3 ################################################################################
3 ################################################################################
4 ## RHODECODE ENTERPRISE CONFIGURATION ##
4 ## RHODECODE COMMUNITY EDITION CONFIGURATION ##
5 # The %(here)s variable will be replaced with the parent directory of this file#
5 # The %(here)s variable will be replaced with the parent directory of this file#
6 ################################################################################
6 ################################################################################
7
7
8 [DEFAULT]
8 [DEFAULT]
9 debug = true
9 debug = true
10
10
11 ################################################################################
11 ################################################################################
12 ## EMAIL CONFIGURATION ##
12 ## EMAIL CONFIGURATION ##
13 ## Uncomment and replace with the email address which should receive ##
13 ## Uncomment and replace with the email address which should receive ##
14 ## any error reports after an application crash ##
14 ## any error reports after an application crash ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
15 ## Additionally these settings will be used by the RhodeCode mailing system ##
16 ################################################################################
16 ################################################################################
17
17
18 ## prefix all emails subjects with given prefix, helps filtering out emails
18 ## prefix all emails subjects with given prefix, helps filtering out emails
19 #email_prefix = [RhodeCode]
19 #email_prefix = [RhodeCode]
20
20
21 ## email FROM address all mails will be sent
21 ## email FROM address all mails will be sent
22 #app_email_from = rhodecode-noreply@localhost
22 #app_email_from = rhodecode-noreply@localhost
23
23
24 ## Uncomment and replace with the address which should receive any error report
24 ## Uncomment and replace with the address which should receive any error report
25 ## note: using appenlight for error handling doesn't need this to be uncommented
25 ## note: using appenlight for error handling doesn't need this to be uncommented
26 #email_to = admin@localhost
26 #email_to = admin@localhost
27
27
28 ## in case of Application errors, sent an error email form
28 ## in case of Application errors, sent an error email form
29 #error_email_from = rhodecode_error@localhost
29 #error_email_from = rhodecode_error@localhost
30
30
31 ## additional error message to be send in case of server crash
31 ## additional error message to be send in case of server crash
32 #error_message =
32 #error_message =
33
33
34
34
35 #smtp_server = mail.server.com
35 #smtp_server = mail.server.com
36 #smtp_username =
36 #smtp_username =
37 #smtp_password =
37 #smtp_password =
38 #smtp_port =
38 #smtp_port =
39 #smtp_use_tls = false
39 #smtp_use_tls = false
40 #smtp_use_ssl = true
40 #smtp_use_ssl = true
41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
41 ## Specify available auth parameters here (e.g. LOGIN PLAIN CRAM-MD5, etc.)
42 #smtp_auth =
42 #smtp_auth =
43
43
44 [server:main]
44 [server:main]
45 ## COMMON ##
45 ## COMMON ##
46 host = 127.0.0.1
46 host = 127.0.0.1
47 port = 5000
47 port = 5000
48
48
49 ##################################
49 ##################################
50 ## WAITRESS WSGI SERVER ##
50 ## WAITRESS WSGI SERVER ##
51 ## Recommended for Development ##
51 ## Recommended for Development ##
52 ##################################
52 ##################################
53
53
54 #use = egg:waitress#main
54 #use = egg:waitress#main
55 ## number of worker threads
55 ## number of worker threads
56 #threads = 5
56 #threads = 5
57 ## MAX BODY SIZE 100GB
57 ## MAX BODY SIZE 100GB
58 #max_request_body_size = 107374182400
58 #max_request_body_size = 107374182400
59 ## Use poll instead of select, fixes file descriptors limits problems.
59 ## Use poll instead of select, fixes file descriptors limits problems.
60 ## May not work on old windows systems.
60 ## May not work on old windows systems.
61 #asyncore_use_poll = true
61 #asyncore_use_poll = true
62
62
63
63
64 ##########################
64 ##########################
65 ## GUNICORN WSGI SERVER ##
65 ## GUNICORN WSGI SERVER ##
66 ##########################
66 ##########################
67 ## run with gunicorn --log-config <inifile.ini> --paste <inifile.ini>
67 ## run with gunicorn --log-config rhodecode.ini --paste rhodecode.ini
68
68
69 use = egg:gunicorn#main
69 use = egg:gunicorn#main
70 ## Sets the number of process workers. You must set `instance_id = *`
70 ## Sets the number of process workers. You must set `instance_id = *`
71 ## when this option is set to more than one worker, recommended
71 ## when this option is set to more than one worker, recommended
72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
72 ## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
73 ## The `instance_id = *` must be set in the [app:main] section below
73 ## The `instance_id = *` must be set in the [app:main] section below
74 workers = 2
74 workers = 2
75 ## number of threads for each of the worker, must be set to 1 for gevent
75 ## number of threads for each of the worker, must be set to 1 for gevent
76 ## generally recommened to be at 1
76 ## generally recommened to be at 1
77 #threads = 1
77 #threads = 1
78 ## process name
78 ## process name
79 proc_name = rhodecode
79 proc_name = rhodecode
80 ## type of worker class, one of sync, gevent
80 ## type of worker class, one of sync, gevent
81 ## recommended for bigger setup is using of of other than sync one
81 ## recommended for bigger setup is using of of other than sync one
82 worker_class = sync
82 worker_class = sync
83 ## The maximum number of simultaneous clients. Valid only for Gevent
83 ## The maximum number of simultaneous clients. Valid only for Gevent
84 #worker_connections = 10
84 #worker_connections = 10
85 ## max number of requests that worker will handle before being gracefully
85 ## max number of requests that worker will handle before being gracefully
86 ## restarted, could prevent memory leaks
86 ## restarted, could prevent memory leaks
87 max_requests = 1000
87 max_requests = 1000
88 max_requests_jitter = 30
88 max_requests_jitter = 30
89 ## amount of time a worker can spend with handling a request before it
89 ## amount of time a worker can spend with handling a request before it
90 ## gets killed and restarted. Set to 6hrs
90 ## gets killed and restarted. Set to 6hrs
91 timeout = 21600
91 timeout = 21600
92
92
93
93
94 ## prefix middleware for RhodeCode, disables force_https flag.
94 ## prefix middleware for RhodeCode.
95 ## recommended when using proxy setup.
95 ## recommended when using proxy setup.
96 ## allows to set RhodeCode under a prefix in server.
96 ## allows to set RhodeCode under a prefix in server.
97 ## eg https://server.com/<prefix>. Enable `filter-with =` option below as well.
97 ## eg https://server.com/custom_prefix. Enable `filter-with =` option below as well.
98 ## optionally set prefix like: `prefix = /<your-prefix>`
98 ## And set your prefix like: `prefix = /custom_prefix`
99 ## be sure to also set beaker.session.cookie_path = /custom_prefix if you need
100 ## to make your cookies only work on prefix url
99 [filter:proxy-prefix]
101 [filter:proxy-prefix]
100 use = egg:PasteDeploy#prefix
102 use = egg:PasteDeploy#prefix
101 prefix = /
103 prefix = /
102
104
103 [app:main]
105 [app:main]
104 use = egg:rhodecode-enterprise-ce
106 use = egg:rhodecode-enterprise-ce
105
107
106 ## enable proxy prefix middleware, defined above
108 ## enable proxy prefix middleware, defined above
107 #filter-with = proxy-prefix
109 #filter-with = proxy-prefix
108
110
109 ## encryption key used to encrypt social plugin tokens,
111 ## encryption key used to encrypt social plugin tokens,
110 ## remote_urls with credentials etc, if not set it defaults to
112 ## remote_urls with credentials etc, if not set it defaults to
111 ## `beaker.session.secret`
113 ## `beaker.session.secret`
112 #rhodecode.encrypted_values.secret =
114 #rhodecode.encrypted_values.secret =
113
115
114 ## decryption strict mode (enabled by default). It controls if decryption raises
116 ## decryption strict mode (enabled by default). It controls if decryption raises
115 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
117 ## `SignatureVerificationError` in case of wrong key, or damaged encryption data.
116 #rhodecode.encrypted_values.strict = false
118 #rhodecode.encrypted_values.strict = false
117
119
118 ## return gzipped responses from Rhodecode (static files/application)
120 ## return gzipped responses from Rhodecode (static files/application)
119 gzip_responses = false
121 gzip_responses = false
120
122
121 ## autogenerate javascript routes file on startup
123 ## autogenerate javascript routes file on startup
122 generate_js_files = false
124 generate_js_files = false
123
125
124 ## Optional Languages
126 ## Optional Languages
125 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
127 ## en(default), be, de, es, fr, it, ja, pl, pt, ru, zh
126 lang = en
128 lang = en
127
129
128 ## perform a full repository scan on each server start, this should be
130 ## perform a full repository scan on each server start, this should be
129 ## set to false after first startup, to allow faster server restarts.
131 ## set to false after first startup, to allow faster server restarts.
130 startup.import_repos = false
132 startup.import_repos = false
131
133
132 ## Uncomment and set this path to use archive download cache.
134 ## Uncomment and set this path to use archive download cache.
133 ## Once enabled, generated archives will be cached at this location
135 ## Once enabled, generated archives will be cached at this location
134 ## and served from the cache during subsequent requests for the same archive of
136 ## and served from the cache during subsequent requests for the same archive of
135 ## the repository.
137 ## the repository.
136 #archive_cache_dir = /tmp/tarballcache
138 #archive_cache_dir = /tmp/tarballcache
137
139
138 ## change this to unique ID for security
140 ## change this to unique ID for security
139 app_instance_uuid = rc-production
141 app_instance_uuid = rc-production
140
142
141 ## cut off limit for large diffs (size in bytes)
143 ## cut off limit for large diffs (size in bytes)
142 cut_off_limit_diff = 1024000
144 cut_off_limit_diff = 1024000
143 cut_off_limit_file = 256000
145 cut_off_limit_file = 256000
144
146
145 ## use cache version of scm repo everywhere
147 ## use cache version of scm repo everywhere
146 vcs_full_cache = true
148 vcs_full_cache = true
147
149
148 ## force https in RhodeCode, fixes https redirects, assumes it's always https
150 ## force https in RhodeCode, fixes https redirects, assumes it's always https
149 ## Normally this is controlled by proper http flags sent from http server
151 ## Normally this is controlled by proper http flags sent from http server
150 force_https = false
152 force_https = false
151
153
152 ## use Strict-Transport-Security headers
154 ## use Strict-Transport-Security headers
153 use_htsts = false
155 use_htsts = false
154
156
155 ## number of commits stats will parse on each iteration
157 ## number of commits stats will parse on each iteration
156 commit_parse_limit = 25
158 commit_parse_limit = 25
157
159
158 ## git rev filter option, --all is the default filter, if you need to
160 ## git rev filter option, --all is the default filter, if you need to
159 ## hide all refs in changelog switch this to --branches --tags
161 ## hide all refs in changelog switch this to --branches --tags
160 git_rev_filter = --branches --tags
162 git_rev_filter = --branches --tags
161
163
162 # Set to true if your repos are exposed using the dumb protocol
164 # Set to true if your repos are exposed using the dumb protocol
163 git_update_server_info = false
165 git_update_server_info = false
164
166
165 ## RSS/ATOM feed options
167 ## RSS/ATOM feed options
166 rss_cut_off_limit = 256000
168 rss_cut_off_limit = 256000
167 rss_items_per_page = 10
169 rss_items_per_page = 10
168 rss_include_diff = false
170 rss_include_diff = false
169
171
170 ## gist URL alias, used to create nicer urls for gist. This should be an
172 ## gist URL alias, used to create nicer urls for gist. This should be an
171 ## url that does rewrites to _admin/gists/<gistid>.
173 ## url that does rewrites to _admin/gists/{gistid}.
172 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
174 ## example: http://gist.rhodecode.org/{gistid}. Empty means use the internal
173 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/<gistid>
175 ## RhodeCode url, ie. http[s]://rhodecode.server/_admin/gists/{gistid}
174 gist_alias_url =
176 gist_alias_url =
175
177
176 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
178 ## List of controllers (using glob pattern syntax) that AUTH TOKENS could be
177 ## used for access.
179 ## used for access.
178 ## Adding ?auth_token = <token> to the url authenticates this request as if it
180 ## Adding ?auth_token=TOKEN_HASH to the url authenticates this request as if it
179 ## came from the the logged in user who own this authentication token.
181 ## came from the the logged in user who own this authentication token.
180 ##
182 ##
181 ## Syntax is <ControllerClass>:<function_pattern>.
183 ## Syntax is ControllerClass:function_pattern.
182 ## To enable access to raw_files put `FilesController:raw`.
184 ## To enable access to raw_files put `FilesController:raw`.
183 ## To enable access to patches add `ChangesetController:changeset_patch`.
185 ## To enable access to patches add `ChangesetController:changeset_patch`.
184 ## The list should be "," separated and on a single line.
186 ## The list should be "," separated and on a single line.
185 ##
187 ##
186 ## Recommended controllers to enable:
188 ## Recommended controllers to enable:
187 # ChangesetController:changeset_patch,
189 # ChangesetController:changeset_patch,
188 # ChangesetController:changeset_raw,
190 # ChangesetController:changeset_raw,
189 # FilesController:raw,
191 # FilesController:raw,
190 # FilesController:archivefile,
192 # FilesController:archivefile,
191 # GistsController:*,
193 # GistsController:*,
192 api_access_controllers_whitelist =
194 api_access_controllers_whitelist =
193
195
194 ## default encoding used to convert from and to unicode
196 ## default encoding used to convert from and to unicode
195 ## can be also a comma separated list of encoding in case of mixed encodings
197 ## can be also a comma separated list of encoding in case of mixed encodings
196 default_encoding = UTF-8
198 default_encoding = UTF-8
197
199
198 ## instance-id prefix
200 ## instance-id prefix
199 ## a prefix key for this instance used for cache invalidation when running
201 ## a prefix key for this instance used for cache invalidation when running
200 ## multiple instances of rhodecode, make sure it's globally unique for
202 ## multiple instances of rhodecode, make sure it's globally unique for
201 ## all running rhodecode instances. Leave empty if you don't use it
203 ## all running rhodecode instances. Leave empty if you don't use it
202 instance_id =
204 instance_id =
203
205
204 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
206 ## Fallback authentication plugin. Set this to a plugin ID to force the usage
205 ## of an authentication plugin also if it is disabled by it's settings.
207 ## of an authentication plugin also if it is disabled by it's settings.
206 ## This could be useful if you are unable to log in to the system due to broken
208 ## This could be useful if you are unable to log in to the system due to broken
207 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
209 ## authentication settings. Then you can enable e.g. the internal rhodecode auth
208 ## module to log in again and fix the settings.
210 ## module to log in again and fix the settings.
209 ##
211 ##
210 ## Available builtin plugin IDs (hash is part of the ID):
212 ## Available builtin plugin IDs (hash is part of the ID):
211 ## egg:rhodecode-enterprise-ce#rhodecode
213 ## egg:rhodecode-enterprise-ce#rhodecode
212 ## egg:rhodecode-enterprise-ce#pam
214 ## egg:rhodecode-enterprise-ce#pam
213 ## egg:rhodecode-enterprise-ce#ldap
215 ## egg:rhodecode-enterprise-ce#ldap
214 ## egg:rhodecode-enterprise-ce#jasig_cas
216 ## egg:rhodecode-enterprise-ce#jasig_cas
215 ## egg:rhodecode-enterprise-ce#headers
217 ## egg:rhodecode-enterprise-ce#headers
216 ## egg:rhodecode-enterprise-ce#crowd
218 ## egg:rhodecode-enterprise-ce#crowd
217 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
219 #rhodecode.auth_plugin_fallback = egg:rhodecode-enterprise-ce#rhodecode
218
220
219 ## alternative return HTTP header for failed authentication. Default HTTP
221 ## alternative return HTTP header for failed authentication. Default HTTP
220 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
222 ## response is 401 HTTPUnauthorized. Currently HG clients have troubles with
221 ## handling that causing a series of failed authentication calls.
223 ## handling that causing a series of failed authentication calls.
222 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
224 ## Set this variable to 403 to return HTTPForbidden, or any other HTTP code
223 ## This will be served instead of default 401 on bad authnetication
225 ## This will be served instead of default 401 on bad authnetication
224 auth_ret_code =
226 auth_ret_code =
225
227
226 ## use special detection method when serving auth_ret_code, instead of serving
228 ## use special detection method when serving auth_ret_code, instead of serving
227 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
229 ## ret_code directly, use 401 initially (Which triggers credentials prompt)
228 ## and then serve auth_ret_code to clients
230 ## and then serve auth_ret_code to clients
229 auth_ret_code_detection = false
231 auth_ret_code_detection = false
230
232
231 ## locking return code. When repository is locked return this HTTP code. 2XX
233 ## locking return code. When repository is locked return this HTTP code. 2XX
232 ## codes don't break the transactions while 4XX codes do
234 ## codes don't break the transactions while 4XX codes do
233 lock_ret_code = 423
235 lock_ret_code = 423
234
236
235 ## allows to change the repository location in settings page
237 ## allows to change the repository location in settings page
236 allow_repo_location_change = true
238 allow_repo_location_change = true
237
239
238 ## allows to setup custom hooks in settings page
240 ## allows to setup custom hooks in settings page
239 allow_custom_hooks_settings = true
241 allow_custom_hooks_settings = true
240
242
241 ## generated license token, goto license page in RhodeCode settings to obtain
243 ## generated license token, goto license page in RhodeCode settings to obtain
242 ## new token
244 ## new token
243 license_token =
245 license_token =
244
246
245 ## supervisor connection uri, for managing supervisor and logs.
247 ## supervisor connection uri, for managing supervisor and logs.
246 supervisor.uri =
248 supervisor.uri =
247 ## supervisord group name/id we only want this RC instance to handle
249 ## supervisord group name/id we only want this RC instance to handle
248 supervisor.group_id = prod
250 supervisor.group_id = prod
249
251
250 ## Display extended labs settings
252 ## Display extended labs settings
251 labs_settings_active = true
253 labs_settings_active = true
252
254
253 ####################################
255 ####################################
254 ### CELERY CONFIG ####
256 ### CELERY CONFIG ####
255 ####################################
257 ####################################
256 use_celery = false
258 use_celery = false
257 broker.host = localhost
259 broker.host = localhost
258 broker.vhost = rabbitmqhost
260 broker.vhost = rabbitmqhost
259 broker.port = 5672
261 broker.port = 5672
260 broker.user = rabbitmq
262 broker.user = rabbitmq
261 broker.password = qweqwe
263 broker.password = qweqwe
262
264
263 celery.imports = rhodecode.lib.celerylib.tasks
265 celery.imports = rhodecode.lib.celerylib.tasks
264
266
265 celery.result.backend = amqp
267 celery.result.backend = amqp
266 celery.result.dburi = amqp://
268 celery.result.dburi = amqp://
267 celery.result.serialier = json
269 celery.result.serialier = json
268
270
269 #celery.send.task.error.emails = true
271 #celery.send.task.error.emails = true
270 #celery.amqp.task.result.expires = 18000
272 #celery.amqp.task.result.expires = 18000
271
273
272 celeryd.concurrency = 2
274 celeryd.concurrency = 2
273 #celeryd.log.file = celeryd.log
275 #celeryd.log.file = celeryd.log
274 celeryd.log.level = debug
276 celeryd.log.level = debug
275 celeryd.max.tasks.per.child = 1
277 celeryd.max.tasks.per.child = 1
276
278
277 ## tasks will never be sent to the queue, but executed locally instead.
279 ## tasks will never be sent to the queue, but executed locally instead.
278 celery.always.eager = false
280 celery.always.eager = false
279
281
280 ####################################
282 ####################################
281 ### BEAKER CACHE ####
283 ### BEAKER CACHE ####
282 ####################################
284 ####################################
283 # default cache dir for templates. Putting this into a ramdisk
285 # default cache dir for templates. Putting this into a ramdisk
284 ## can boost performance, eg. %(here)s/data_ramdisk
286 ## can boost performance, eg. %(here)s/data_ramdisk
285 cache_dir = %(here)s/data
287 cache_dir = %(here)s/data
286
288
287 ## locking and default file storage for Beaker. Putting this into a ramdisk
289 ## locking and default file storage for Beaker. Putting this into a ramdisk
288 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
290 ## can boost performance, eg. %(here)s/data_ramdisk/cache/beaker_data
289 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
291 beaker.cache.data_dir = %(here)s/data/cache/beaker_data
290 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
292 beaker.cache.lock_dir = %(here)s/data/cache/beaker_lock
291
293
292 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
294 beaker.cache.regions = super_short_term, short_term, long_term, sql_cache_short, auth_plugins, repo_cache_long
293
295
294 beaker.cache.super_short_term.type = memory
296 beaker.cache.super_short_term.type = memory
295 beaker.cache.super_short_term.expire = 10
297 beaker.cache.super_short_term.expire = 10
296 beaker.cache.super_short_term.key_length = 256
298 beaker.cache.super_short_term.key_length = 256
297
299
298 beaker.cache.short_term.type = memory
300 beaker.cache.short_term.type = memory
299 beaker.cache.short_term.expire = 60
301 beaker.cache.short_term.expire = 60
300 beaker.cache.short_term.key_length = 256
302 beaker.cache.short_term.key_length = 256
301
303
302 beaker.cache.long_term.type = memory
304 beaker.cache.long_term.type = memory
303 beaker.cache.long_term.expire = 36000
305 beaker.cache.long_term.expire = 36000
304 beaker.cache.long_term.key_length = 256
306 beaker.cache.long_term.key_length = 256
305
307
306 beaker.cache.sql_cache_short.type = memory
308 beaker.cache.sql_cache_short.type = memory
307 beaker.cache.sql_cache_short.expire = 10
309 beaker.cache.sql_cache_short.expire = 10
308 beaker.cache.sql_cache_short.key_length = 256
310 beaker.cache.sql_cache_short.key_length = 256
309
311
310 ## default is memory cache, configure only if required
312 ## default is memory cache, configure only if required
311 ## using multi-node or multi-worker setup
313 ## using multi-node or multi-worker setup
312 #beaker.cache.auth_plugins.type = ext:database
314 #beaker.cache.auth_plugins.type = ext:database
313 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
315 #beaker.cache.auth_plugins.lock_dir = %(here)s/data/cache/auth_plugin_lock
314 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
316 #beaker.cache.auth_plugins.url = postgresql://postgres:secret@localhost/rhodecode
315 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
317 #beaker.cache.auth_plugins.url = mysql://root:secret@127.0.0.1/rhodecode
316 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
318 #beaker.cache.auth_plugins.sa.pool_recycle = 3600
317 #beaker.cache.auth_plugins.sa.pool_size = 10
319 #beaker.cache.auth_plugins.sa.pool_size = 10
318 #beaker.cache.auth_plugins.sa.max_overflow = 0
320 #beaker.cache.auth_plugins.sa.max_overflow = 0
319
321
320 beaker.cache.repo_cache_long.type = memorylru_base
322 beaker.cache.repo_cache_long.type = memorylru_base
321 beaker.cache.repo_cache_long.max_items = 4096
323 beaker.cache.repo_cache_long.max_items = 4096
322 beaker.cache.repo_cache_long.expire = 2592000
324 beaker.cache.repo_cache_long.expire = 2592000
323
325
324 ## default is memorylru_base cache, configure only if required
326 ## default is memorylru_base cache, configure only if required
325 ## using multi-node or multi-worker setup
327 ## using multi-node or multi-worker setup
326 #beaker.cache.repo_cache_long.type = ext:memcached
328 #beaker.cache.repo_cache_long.type = ext:memcached
327 #beaker.cache.repo_cache_long.url = localhost:11211
329 #beaker.cache.repo_cache_long.url = localhost:11211
328 #beaker.cache.repo_cache_long.expire = 1209600
330 #beaker.cache.repo_cache_long.expire = 1209600
329 #beaker.cache.repo_cache_long.key_length = 256
331 #beaker.cache.repo_cache_long.key_length = 256
330
332
331 ####################################
333 ####################################
332 ### BEAKER SESSION ####
334 ### BEAKER SESSION ####
333 ####################################
335 ####################################
334
336
335 ## .session.type is type of storage options for the session, current allowed
337 ## .session.type is type of storage options for the session, current allowed
336 ## types are file, ext:memcached, ext:database, and memory (default).
338 ## types are file, ext:memcached, ext:database, and memory (default).
337 beaker.session.type = file
339 beaker.session.type = file
338 beaker.session.data_dir = %(here)s/data/sessions/data
340 beaker.session.data_dir = %(here)s/data/sessions/data
339
341
340 ## db based session, fast, and allows easy management over logged in users
342 ## db based session, fast, and allows easy management over logged in users
341 #beaker.session.type = ext:database
343 #beaker.session.type = ext:database
342 #beaker.session.table_name = db_session
344 #beaker.session.table_name = db_session
343 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
345 #beaker.session.sa.url = postgresql://postgres:secret@localhost/rhodecode
344 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
346 #beaker.session.sa.url = mysql://root:secret@127.0.0.1/rhodecode
345 #beaker.session.sa.pool_recycle = 3600
347 #beaker.session.sa.pool_recycle = 3600
346 #beaker.session.sa.echo = false
348 #beaker.session.sa.echo = false
347
349
348 beaker.session.key = rhodecode
350 beaker.session.key = rhodecode
349 beaker.session.secret = production-rc-uytcxaz
351 beaker.session.secret = production-rc-uytcxaz
350 beaker.session.lock_dir = %(here)s/data/sessions/lock
352 beaker.session.lock_dir = %(here)s/data/sessions/lock
351
353
352 ## Secure encrypted cookie. Requires AES and AES python libraries
354 ## Secure encrypted cookie. Requires AES and AES python libraries
353 ## you must disable beaker.session.secret to use this
355 ## you must disable beaker.session.secret to use this
354 #beaker.session.encrypt_key = <key_for_encryption>
356 #beaker.session.encrypt_key = key_for_encryption
355 #beaker.session.validate_key = <validation_key>
357 #beaker.session.validate_key = validation_key
356
358
357 ## sets session as invalid(also logging out user) if it haven not been
359 ## sets session as invalid(also logging out user) if it haven not been
358 ## accessed for given amount of time in seconds
360 ## accessed for given amount of time in seconds
359 beaker.session.timeout = 2592000
361 beaker.session.timeout = 2592000
360 beaker.session.httponly = true
362 beaker.session.httponly = true
361 ## Path to use for the cookie.
363 ## Path to use for the cookie. Set to prefix if you use prefix middleware
362 #beaker.session.cookie_path = /<your-prefix>
364 #beaker.session.cookie_path = /custom_prefix
363
365
364 ## uncomment for https secure cookie
366 ## uncomment for https secure cookie
365 beaker.session.secure = false
367 beaker.session.secure = false
366
368
367 ## auto save the session to not to use .save()
369 ## auto save the session to not to use .save()
368 beaker.session.auto = false
370 beaker.session.auto = false
369
371
370 ## default cookie expiration time in seconds, set to `true` to set expire
372 ## default cookie expiration time in seconds, set to `true` to set expire
371 ## at browser close
373 ## at browser close
372 #beaker.session.cookie_expires = 3600
374 #beaker.session.cookie_expires = 3600
373
375
374 ###################################
376 ###################################
375 ## SEARCH INDEXING CONFIGURATION ##
377 ## SEARCH INDEXING CONFIGURATION ##
376 ###################################
378 ###################################
377 ## Full text search indexer is available in rhodecode-tools under
379 ## Full text search indexer is available in rhodecode-tools under
378 ## `rhodecode-tools index` command
380 ## `rhodecode-tools index` command
379
381
380 # WHOOSH Backend, doesn't require additional services to run
382 ## WHOOSH Backend, doesn't require additional services to run
381 # it works good with few dozen repos
383 ## it works good with few dozen repos
382 search.module = rhodecode.lib.index.whoosh
384 search.module = rhodecode.lib.index.whoosh
383 search.location = %(here)s/data/index
385 search.location = %(here)s/data/index
384
386
385 ########################################
387 ########################################
386 ### CHANNELSTREAM CONFIG ####
388 ### CHANNELSTREAM CONFIG ####
387 ########################################
389 ########################################
388 ## channelstream enables persistent connections and live notification
390 ## channelstream enables persistent connections and live notification
389 ## in the system. It's also used by the chat system
391 ## in the system. It's also used by the chat system
390
392
391 channelstream.enabled = false
393 channelstream.enabled = false
392 ## location of channelstream server on the backend
394 ## location of channelstream server on the backend
393 channelstream.server = 127.0.0.1:9800
395 channelstream.server = 127.0.0.1:9800
394 ## location of the channelstream server from outside world
396 ## location of the channelstream server from outside world
395 ## most likely this would be an http server special backend URL, that handles
397 ## most likely this would be an http server special backend URL, that handles
396 ## websocket connections see nginx example for config
398 ## websocket connections see nginx example for config
397 # channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
399 # channelstream.ws_url = ws://rhodecode.yourserver.com/_channelstream
398 ## proxy path that can be used by http daemons for exposing channelstream
400 ## proxy path that can be used by http daemons for exposing channelstream
399 # channelstream.proxy_path = /_channelstream
401 # channelstream.proxy_path = /_channelstream
400 channelstream.secret = secret
402 channelstream.secret = secret
401 channelstream.history.location = %(here)s/channelstream_history
403 channelstream.history.location = %(here)s/channelstream_history
402
404
403
405
404 ###################################
406 ###################################
405 ## APPENLIGHT CONFIG ##
407 ## APPENLIGHT CONFIG ##
406 ###################################
408 ###################################
407
409
408 ## Appenlight is tailored to work with RhodeCode, see
410 ## Appenlight is tailored to work with RhodeCode, see
409 ## http://appenlight.com for details how to obtain an account
411 ## http://appenlight.com for details how to obtain an account
410
412
411 ## appenlight integration enabled
413 ## appenlight integration enabled
412 appenlight = false
414 appenlight = false
413
415
414 appenlight.server_url = https://api.appenlight.com
416 appenlight.server_url = https://api.appenlight.com
415 appenlight.api_key = YOUR_API_KEY
417 appenlight.api_key = YOUR_API_KEY
416 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
418 #appenlight.transport_config = https://api.appenlight.com?threaded=1&timeout=5
417
419
418 # used for JS client
420 # used for JS client
419 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
421 appenlight.api_public_key = YOUR_API_PUBLIC_KEY
420
422
421 ## TWEAK AMOUNT OF INFO SENT HERE
423 ## TWEAK AMOUNT OF INFO SENT HERE
422
424
423 ## enables 404 error logging (default False)
425 ## enables 404 error logging (default False)
424 appenlight.report_404 = false
426 appenlight.report_404 = false
425
427
426 ## time in seconds after request is considered being slow (default 1)
428 ## time in seconds after request is considered being slow (default 1)
427 appenlight.slow_request_time = 1
429 appenlight.slow_request_time = 1
428
430
429 ## record slow requests in application
431 ## record slow requests in application
430 ## (needs to be enabled for slow datastore recording and time tracking)
432 ## (needs to be enabled for slow datastore recording and time tracking)
431 appenlight.slow_requests = true
433 appenlight.slow_requests = true
432
434
433 ## enable hooking to application loggers
435 ## enable hooking to application loggers
434 appenlight.logging = true
436 appenlight.logging = true
435
437
436 ## minimum log level for log capture
438 ## minimum log level for log capture
437 appenlight.logging.level = WARNING
439 appenlight.logging.level = WARNING
438
440
439 ## send logs only from erroneous/slow requests
441 ## send logs only from erroneous/slow requests
440 ## (saves API quota for intensive logging)
442 ## (saves API quota for intensive logging)
441 appenlight.logging_on_error = false
443 appenlight.logging_on_error = false
442
444
443 ## list of additonal keywords that should be grabbed from environ object
445 ## list of additonal keywords that should be grabbed from environ object
444 ## can be string with comma separated list of words in lowercase
446 ## can be string with comma separated list of words in lowercase
445 ## (by default client will always send following info:
447 ## (by default client will always send following info:
446 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
448 ## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that
447 ## start with HTTP* this list be extended with additional keywords here
449 ## start with HTTP* this list be extended with additional keywords here
448 appenlight.environ_keys_whitelist =
450 appenlight.environ_keys_whitelist =
449
451
450 ## list of keywords that should be blanked from request object
452 ## list of keywords that should be blanked from request object
451 ## can be string with comma separated list of words in lowercase
453 ## can be string with comma separated list of words in lowercase
452 ## (by default client will always blank keys that contain following words
454 ## (by default client will always blank keys that contain following words
453 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
455 ## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf'
454 ## this list be extended with additional keywords set here
456 ## this list be extended with additional keywords set here
455 appenlight.request_keys_blacklist =
457 appenlight.request_keys_blacklist =
456
458
457 ## list of namespaces that should be ignores when gathering log entries
459 ## list of namespaces that should be ignores when gathering log entries
458 ## can be string with comma separated list of namespaces
460 ## can be string with comma separated list of namespaces
459 ## (by default the client ignores own entries: appenlight_client.client)
461 ## (by default the client ignores own entries: appenlight_client.client)
460 appenlight.log_namespace_blacklist =
462 appenlight.log_namespace_blacklist =
461
463
462
464
463 ################################################################################
465 ################################################################################
464 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
466 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
465 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
467 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
466 ## execute malicious code after an exception is raised. ##
468 ## execute malicious code after an exception is raised. ##
467 ################################################################################
469 ################################################################################
468 set debug = false
470 set debug = false
469
471
470
472
471 #########################################################
473 #########################################################
472 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
474 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
473 #########################################################
475 #########################################################
474 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
476 #sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db?timeout=30
475 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
477 #sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
476 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
478 #sqlalchemy.db1.url = mysql://root:qweqwe@localhost/rhodecode
477 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
479 sqlalchemy.db1.url = postgresql://postgres:qweqwe@localhost/rhodecode
478
480
479 # see sqlalchemy docs for other advanced settings
481 # see sqlalchemy docs for other advanced settings
480
482
481 ## print the sql statements to output
483 ## print the sql statements to output
482 sqlalchemy.db1.echo = false
484 sqlalchemy.db1.echo = false
483 ## recycle the connections after this ammount of seconds
485 ## recycle the connections after this amount of seconds
484 sqlalchemy.db1.pool_recycle = 3600
486 sqlalchemy.db1.pool_recycle = 3600
485 sqlalchemy.db1.convert_unicode = true
487 sqlalchemy.db1.convert_unicode = true
486
488
487 ## the number of connections to keep open inside the connection pool.
489 ## the number of connections to keep open inside the connection pool.
488 ## 0 indicates no limit
490 ## 0 indicates no limit
489 #sqlalchemy.db1.pool_size = 5
491 #sqlalchemy.db1.pool_size = 5
490
492
491 ## the number of connections to allow in connection pool "overflow", that is
493 ## the number of connections to allow in connection pool "overflow", that is
492 ## connections that can be opened above and beyond the pool_size setting,
494 ## connections that can be opened above and beyond the pool_size setting,
493 ## which defaults to five.
495 ## which defaults to five.
494 #sqlalchemy.db1.max_overflow = 10
496 #sqlalchemy.db1.max_overflow = 10
495
497
496
498
497 ##################
499 ##################
498 ### VCS CONFIG ###
500 ### VCS CONFIG ###
499 ##################
501 ##################
500 vcs.server.enable = true
502 vcs.server.enable = true
501 vcs.server = localhost:9900
503 vcs.server = localhost:9900
502
504
503 ## Web server connectivity protocol, responsible for web based VCS operatations
505 ## Web server connectivity protocol, responsible for web based VCS operatations
504 ## Available protocols are:
506 ## Available protocols are:
505 ## `pyro4` - using pyro4 server
507 ## `pyro4` - use pyro4 server
506 ## `http` - using http-rpc backend
508 ## `http` - use http-rpc backend (default)
507 #vcs.server.protocol = http
509 vcs.server.protocol = http
508
510
509 ## Push/Pull operations protocol, available options are:
511 ## Push/Pull operations protocol, available options are:
510 ## `pyro4` - using pyro4 server
512 ## `pyro4` - use pyro4 server
511 ## `rhodecode.lib.middleware.utils.scm_app_http` - Http based, recommended
513 ## `http` - use http-rpc backend (default)
512 ## `vcsserver.scm_app` - internal app (EE only)
514 ##
513 #vcs.scm_app_implementation = rhodecode.lib.middleware.utils.scm_app_http
515 vcs.scm_app_implementation = http
514
516
515 ## Push/Pull operations hooks protocol, available options are:
517 ## Push/Pull operations hooks protocol, available options are:
516 ## `pyro4` - using pyro4 server
518 ## `pyro4` - use pyro4 server
517 ## `http` - using http-rpc backend
519 ## `http` - use http-rpc backend (default)
518 #vcs.hooks.protocol = http
520 vcs.hooks.protocol = http
519
521
520 vcs.server.log_level = info
522 vcs.server.log_level = info
521 ## Start VCSServer with this instance as a subprocess, usefull for development
523 ## Start VCSServer with this instance as a subprocess, usefull for development
522 vcs.start_server = false
524 vcs.start_server = false
523
525
524 ## List of enabled VCS backends, available options are:
526 ## List of enabled VCS backends, available options are:
525 ## `hg` - mercurial
527 ## `hg` - mercurial
526 ## `git` - git
528 ## `git` - git
527 ## `svn` - subversion
529 ## `svn` - subversion
528 vcs.backends = hg, git, svn
530 vcs.backends = hg, git, svn
529
531
530 vcs.connection_timeout = 3600
532 vcs.connection_timeout = 3600
531 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
533 ## Compatibility version when creating SVN repositories. Defaults to newest version when commented out.
532 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
534 ## Available options are: pre-1.4-compatible, pre-1.5-compatible, pre-1.6-compatible, pre-1.8-compatible
533 #vcs.svn.compatible_version = pre-1.8-compatible
535 #vcs.svn.compatible_version = pre-1.8-compatible
534
536
535
537
536 ############################################################
538 ############################################################
537 ### Subversion proxy support (mod_dav_svn) ###
539 ### Subversion proxy support (mod_dav_svn) ###
538 ### Maps RhodeCode repo groups into SVN paths for Apache ###
540 ### Maps RhodeCode repo groups into SVN paths for Apache ###
539 ############################################################
541 ############################################################
540 ## Enable or disable the config file generation.
542 ## Enable or disable the config file generation.
541 svn.proxy.generate_config = false
543 svn.proxy.generate_config = false
542 ## Generate config file with `SVNListParentPath` set to `On`.
544 ## Generate config file with `SVNListParentPath` set to `On`.
543 svn.proxy.list_parent_path = true
545 svn.proxy.list_parent_path = true
544 ## Set location and file name of generated config file.
546 ## Set location and file name of generated config file.
545 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
547 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
546 ## File system path to the directory containing the repositories served by
548 ## Used as a prefix to the `Location` block in the generated config file.
547 ## RhodeCode.
549 ## In most cases it should be set to `/`.
548 svn.proxy.parent_path_root = /path/to/repo_store
549 ## Used as a prefix to the <Location> block in the generated config file. In
550 ## most cases it should be set to `/`.
551 svn.proxy.location_root = /
550 svn.proxy.location_root = /
551 ## Command to reload the mod dav svn configuration on change.
552 ## Example: `/etc/init.d/apache2 reload`
553 #svn.proxy.reload_cmd = /etc/init.d/apache2 reload
554 ## If the timeout expires before the reload command finishes, the command will
555 ## be killed. Setting it to zero means no timeout. Defaults to 10 seconds.
556 #svn.proxy.reload_timeout = 10
552
557
553
558
554 ################################
559 ################################
555 ### LOGGING CONFIGURATION ####
560 ### LOGGING CONFIGURATION ####
556 ################################
561 ################################
557 [loggers]
562 [loggers]
558 keys = root, routes, rhodecode, sqlalchemy, beaker, pyro4, templates
563 keys = root, routes, rhodecode, sqlalchemy, beaker, pyro4, templates
559
564
560 [handlers]
565 [handlers]
561 keys = console, console_sql
566 keys = console, console_sql
562
567
563 [formatters]
568 [formatters]
564 keys = generic, color_formatter, color_formatter_sql
569 keys = generic, color_formatter, color_formatter_sql
565
570
566 #############
571 #############
567 ## LOGGERS ##
572 ## LOGGERS ##
568 #############
573 #############
569 [logger_root]
574 [logger_root]
570 level = NOTSET
575 level = NOTSET
571 handlers = console
576 handlers = console
572
577
573 [logger_routes]
578 [logger_routes]
574 level = DEBUG
579 level = DEBUG
575 handlers =
580 handlers =
576 qualname = routes.middleware
581 qualname = routes.middleware
577 ## "level = DEBUG" logs the route matched and routing variables.
582 ## "level = DEBUG" logs the route matched and routing variables.
578 propagate = 1
583 propagate = 1
579
584
580 [logger_beaker]
585 [logger_beaker]
581 level = DEBUG
586 level = DEBUG
582 handlers =
587 handlers =
583 qualname = beaker.container
588 qualname = beaker.container
584 propagate = 1
589 propagate = 1
585
590
586 [logger_pyro4]
591 [logger_pyro4]
587 level = DEBUG
592 level = DEBUG
588 handlers =
593 handlers =
589 qualname = Pyro4
594 qualname = Pyro4
590 propagate = 1
595 propagate = 1
591
596
592 [logger_templates]
597 [logger_templates]
593 level = INFO
598 level = INFO
594 handlers =
599 handlers =
595 qualname = pylons.templating
600 qualname = pylons.templating
596 propagate = 1
601 propagate = 1
597
602
598 [logger_rhodecode]
603 [logger_rhodecode]
599 level = DEBUG
604 level = DEBUG
600 handlers =
605 handlers =
601 qualname = rhodecode
606 qualname = rhodecode
602 propagate = 1
607 propagate = 1
603
608
604 [logger_sqlalchemy]
609 [logger_sqlalchemy]
605 level = INFO
610 level = INFO
606 handlers = console_sql
611 handlers = console_sql
607 qualname = sqlalchemy.engine
612 qualname = sqlalchemy.engine
608 propagate = 0
613 propagate = 0
609
614
610 ##############
615 ##############
611 ## HANDLERS ##
616 ## HANDLERS ##
612 ##############
617 ##############
613
618
614 [handler_console]
619 [handler_console]
615 class = StreamHandler
620 class = StreamHandler
616 args = (sys.stderr,)
621 args = (sys.stderr,)
617 level = INFO
622 level = INFO
618 formatter = generic
623 formatter = generic
619
624
620 [handler_console_sql]
625 [handler_console_sql]
621 class = StreamHandler
626 class = StreamHandler
622 args = (sys.stderr,)
627 args = (sys.stderr,)
623 level = WARN
628 level = WARN
624 formatter = generic
629 formatter = generic
625
630
626 ################
631 ################
627 ## FORMATTERS ##
632 ## FORMATTERS ##
628 ################
633 ################
629
634
630 [formatter_generic]
635 [formatter_generic]
631 class = rhodecode.lib.logging_formatter.Pyro4AwareFormatter
636 class = rhodecode.lib.logging_formatter.Pyro4AwareFormatter
632 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
637 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
633 datefmt = %Y-%m-%d %H:%M:%S
638 datefmt = %Y-%m-%d %H:%M:%S
634
639
635 [formatter_color_formatter]
640 [formatter_color_formatter]
636 class = rhodecode.lib.logging_formatter.ColorFormatter
641 class = rhodecode.lib.logging_formatter.ColorFormatter
637 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
642 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
638 datefmt = %Y-%m-%d %H:%M:%S
643 datefmt = %Y-%m-%d %H:%M:%S
639
644
640 [formatter_color_formatter_sql]
645 [formatter_color_formatter_sql]
641 class = rhodecode.lib.logging_formatter.ColorFormatterSql
646 class = rhodecode.lib.logging_formatter.ColorFormatterSql
642 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
647 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
643 datefmt = %Y-%m-%d %H:%M:%S
648 datefmt = %Y-%m-%d %H:%M:%S
@@ -1,241 +1,238 b''
1 # Nix environment for the community edition
1 # Nix environment for the community edition
2 #
2 #
3 # This shall be as lean as possible, just producing the Enterprise
3 # This shall be as lean as possible, just producing the Enterprise
4 # derivation. For advanced tweaks to pimp up the development environment we use
4 # derivation. For advanced tweaks to pimp up the development environment we use
5 # "shell.nix" so that it does not have to clutter this file.
5 # "shell.nix" so that it does not have to clutter this file.
6
6
7 { pkgs ? (import <nixpkgs> {})
7 args@
8 , pythonPackages ? "python27Packages"
8 { pythonPackages ? "python27Packages"
9 , pythonExternalOverrides ? self: super: {}
9 , pythonExternalOverrides ? self: super: {}
10 , doCheck ? true
10 , doCheck ? true
11 , ...
11 }:
12 }:
12
13
13 let pkgs_ = pkgs; in
14
15 let
14 let
16 pkgs = pkgs_.overridePackages (self: super: {
15
17 # Override subversion derivation to
16 # Use nixpkgs from args or import them. We use this indirect approach
18 # - activate python bindings
17 # through args to be able to use the name `pkgs` for our customized packages.
19 # - set version to 1.8
18 # Otherwise we will end up with an infinite recursion.
20 subversion = super.subversion18.override {
19 nixpkgs = args.pkgs or (import <nixpkgs> { });
21 httpSupport = true;
20
22 pythonBindings = true;
21 # johbo: Interim bridge which allows us to build with the upcoming
23 python = self.python27Packages.python;
22 # nixos.16.09 branch (unstable at the moment of writing this note) and the
24 };
23 # current stable nixos-16.03.
24 backwardsCompatibleFetchgit = { ... }@args:
25 let
26 origSources = nixpkgs.fetchgit args;
27 in
28 nixpkgs.lib.overrideDerivation origSources (oldAttrs: {
29 NIX_PREFETCH_GIT_CHECKOUT_HOOK = ''
30 find $out -name '.git*' -print0 | xargs -0 rm -rf
31 '';
32 });
33
34 # Create a customized version of nixpkgs which should be used throughout the
35 # rest of this file.
36 pkgs = nixpkgs.overridePackages (self: super: {
37 fetchgit = backwardsCompatibleFetchgit;
25 });
38 });
26
39
27 inherit (pkgs.lib) fix extends;
40 # Evaluates to the last segment of a file system path.
41 basename = path: with pkgs.lib; last (splitString "/" path);
42
43 # source code filter used as arugment to builtins.filterSource.
44 src-filter = path: type: with pkgs.lib;
45 let
46 ext = last (splitString "." path);
47 in
48 !builtins.elem (basename path) [
49 ".git" ".hg" "__pycache__" ".eggs"
50 "bower_components" "node_modules"
51 "build" "data" "result" "tmp"] &&
52 !builtins.elem ext ["egg-info" "pyc"] &&
53 # TODO: johbo: This check is wrong, since "path" contains an absolute path,
54 # it would still be good to restore it since we want to ignore "result-*".
55 !hasPrefix "result" path;
28
56
29 basePythonPackages = with builtins; if isAttrs pythonPackages
57 basePythonPackages = with builtins; if isAttrs pythonPackages
30 then pythonPackages
58 then pythonPackages
31 else getAttr pythonPackages pkgs;
59 else getAttr pythonPackages pkgs;
32
60
33 buildBowerComponents =
61 buildBowerComponents =
34 pkgs.buildBowerComponents or
62 pkgs.buildBowerComponents or
35 (import ./pkgs/backport-16.03-build-bower-components.nix { inherit pkgs; });
63 (import ./pkgs/backport-16.03-build-bower-components.nix { inherit pkgs; });
36
64
37 elem = builtins.elem;
38 basename = path: with pkgs.lib; last (splitString "/" path);
39 startsWith = prefix: full: let
40 actualPrefix = builtins.substring 0 (builtins.stringLength prefix) full;
41 in actualPrefix == prefix;
42
43 src-filter = path: type: with pkgs.lib;
44 let
45 ext = last (splitString "." path);
46 in
47 !elem (basename path) [
48 ".git" ".hg" "__pycache__" ".eggs"
49 "bower_components" "node_modules"
50 "build" "data" "result" "tmp"] &&
51 !elem ext ["egg-info" "pyc"] &&
52 # TODO: johbo: This check is wrong, since "path" contains an absolute path,
53 # it would still be good to restore it since we want to ignore "result-*".
54 !startsWith "result" path;
55
56 sources = pkgs.config.rc.sources or {};
65 sources = pkgs.config.rc.sources or {};
57 version = builtins.readFile ./rhodecode/VERSION;
66 version = builtins.readFile ./rhodecode/VERSION;
58 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
67 rhodecode-enterprise-ce-src = builtins.filterSource src-filter ./.;
59
68
60 nodeEnv = import ./pkgs/node-default.nix {
69 nodeEnv = import ./pkgs/node-default.nix {
61 inherit pkgs;
70 inherit pkgs;
62 };
71 };
63 nodeDependencies = nodeEnv.shell.nodeDependencies;
72 nodeDependencies = nodeEnv.shell.nodeDependencies;
64
73
65 bowerComponents = buildBowerComponents {
74 bowerComponents = buildBowerComponents {
66 name = "enterprise-ce-${version}";
75 name = "enterprise-ce-${version}";
67 generated = ./pkgs/bower-packages.nix;
76 generated = ./pkgs/bower-packages.nix;
68 src = rhodecode-enterprise-ce-src;
77 src = rhodecode-enterprise-ce-src;
69 };
78 };
70
79
71 pythonGeneratedPackages = self: basePythonPackages.override (a: {
80 pythonGeneratedPackages = self: basePythonPackages.override (a: {
72 inherit self;
81 inherit self;
73 })
82 })
74 // (scopedImport {
83 // (scopedImport {
75 self = self;
84 self = self;
76 super = basePythonPackages;
85 super = basePythonPackages;
77 inherit pkgs;
86 inherit pkgs;
78 inherit (pkgs) fetchurl fetchgit;
87 inherit (pkgs) fetchurl fetchgit;
79 } ./pkgs/python-packages.nix);
88 } ./pkgs/python-packages.nix);
80
89
81 pythonOverrides = import ./pkgs/python-packages-overrides.nix {
90 pythonOverrides = import ./pkgs/python-packages-overrides.nix {
82 inherit
91 inherit
83 basePythonPackages
92 basePythonPackages
84 pkgs;
93 pkgs;
85 };
94 };
86
95
87 pythonLocalOverrides = self: super: {
96 pythonLocalOverrides = self: super: {
88 rhodecode-enterprise-ce =
97 rhodecode-enterprise-ce =
89 let
98 let
90 linkNodeAndBowerPackages = ''
99 linkNodeAndBowerPackages = ''
91 echo "Export RhodeCode CE path"
100 echo "Export RhodeCode CE path"
92 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
101 export RHODECODE_CE_PATH=${rhodecode-enterprise-ce-src}
93 echo "Link node packages"
102 echo "Link node packages"
94 rm -fr node_modules
103 rm -fr node_modules
95 mkdir node_modules
104 mkdir node_modules
96 # johbo: Linking individual packages allows us to run "npm install"
105 # johbo: Linking individual packages allows us to run "npm install"
97 # inside of a shell to try things out. Re-entering the shell will
106 # inside of a shell to try things out. Re-entering the shell will
98 # restore a clean environment.
107 # restore a clean environment.
99 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
108 ln -s ${nodeDependencies}/lib/node_modules/* node_modules/
100
109
101 echo "DONE: Link node packages"
110 echo "DONE: Link node packages"
102
111
103 echo "Link bower packages"
112 echo "Link bower packages"
104 rm -fr bower_components
113 rm -fr bower_components
105 mkdir bower_components
114 mkdir bower_components
106
115
107 ln -s ${bowerComponents}/bower_components/* bower_components/
116 ln -s ${bowerComponents}/bower_components/* bower_components/
108 echo "DONE: Link bower packages"
117 echo "DONE: Link bower packages"
109 '';
118 '';
110 in super.rhodecode-enterprise-ce.override (attrs: {
119 in super.rhodecode-enterprise-ce.override (attrs: {
111
120
112 inherit
121 inherit
113 doCheck
122 doCheck
114 version;
123 version;
115 name = "rhodecode-enterprise-ce-${version}";
124 name = "rhodecode-enterprise-ce-${version}";
116 releaseName = "RhodeCodeEnterpriseCE-${version}";
125 releaseName = "RhodeCodeEnterpriseCE-${version}";
117 src = rhodecode-enterprise-ce-src;
126 src = rhodecode-enterprise-ce-src;
118
127
119 buildInputs =
128 buildInputs =
120 attrs.buildInputs ++
129 attrs.buildInputs ++
121 (with self; [
130 (with self; [
122 pkgs.nodePackages.bower
131 pkgs.nodePackages.bower
123 pkgs.nodePackages.grunt-cli
132 pkgs.nodePackages.grunt-cli
124 pkgs.subversion
133 pkgs.subversion
125 pytest-catchlog
134 pytest-catchlog
126 rhodecode-testdata
135 rhodecode-testdata
127 ]);
136 ]);
128
137
129 propagatedBuildInputs = attrs.propagatedBuildInputs ++ (with self; [
138 propagatedBuildInputs = attrs.propagatedBuildInputs ++ (with self; [
130 rhodecode-tools
139 rhodecode-tools
131 ]);
140 ]);
132
141
133 # TODO: johbo: Make a nicer way to expose the parts. Maybe
142 # TODO: johbo: Make a nicer way to expose the parts. Maybe
134 # pkgs/default.nix?
143 # pkgs/default.nix?
135 passthru = {
144 passthru = {
136 inherit
145 inherit
137 bowerComponents
146 bowerComponents
138 linkNodeAndBowerPackages
147 linkNodeAndBowerPackages
139 myPythonPackagesUnfix
148 myPythonPackagesUnfix
140 pythonLocalOverrides;
149 pythonLocalOverrides;
141 pythonPackages = self;
150 pythonPackages = self;
142 };
151 };
143
152
144 LC_ALL = "en_US.UTF-8";
153 LC_ALL = "en_US.UTF-8";
145 LOCALE_ARCHIVE =
154 LOCALE_ARCHIVE =
146 if pkgs.stdenv ? glibc
155 if pkgs.stdenv ? glibc
147 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
156 then "${pkgs.glibcLocales}/lib/locale/locale-archive"
148 else "";
157 else "";
149
158
150 # Somewhat snappier setup of the development environment
151 # TODO: move into shell.nix
152 # TODO: think of supporting a stable path again, so that multiple shells
153 # can share it.
154 shellHook = ''
155 tmp_path=$(mktemp -d)
156 export PATH="$tmp_path/bin:$PATH"
157 export PYTHONPATH="$tmp_path/${self.python.sitePackages}:$PYTHONPATH"
158 mkdir -p $tmp_path/${self.python.sitePackages}
159 python setup.py develop --prefix $tmp_path --allow-hosts ""
160 '' + linkNodeAndBowerPackages;
161
162 preCheck = ''
159 preCheck = ''
163 export PATH="$out/bin:$PATH"
160 export PATH="$out/bin:$PATH"
164 '';
161 '';
165
162
166 postCheck = ''
163 postCheck = ''
167 rm -rf $out/lib/${self.python.libPrefix}/site-packages/pytest_pylons
164 rm -rf $out/lib/${self.python.libPrefix}/site-packages/pytest_pylons
168 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
165 rm -rf $out/lib/${self.python.libPrefix}/site-packages/rhodecode/tests
169 '';
166 '';
170
167
171 preBuild = linkNodeAndBowerPackages + ''
168 preBuild = linkNodeAndBowerPackages + ''
172 grunt
169 grunt
173 rm -fr node_modules
170 rm -fr node_modules
174 '';
171 '';
175
172
176 postInstall = ''
173 postInstall = ''
177 # python based programs need to be wrapped
174 # python based programs need to be wrapped
178 ln -s ${self.supervisor}/bin/supervisor* $out/bin/
175 ln -s ${self.supervisor}/bin/supervisor* $out/bin/
179 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
176 ln -s ${self.gunicorn}/bin/gunicorn $out/bin/
180 ln -s ${self.PasteScript}/bin/paster $out/bin/
177 ln -s ${self.PasteScript}/bin/paster $out/bin/
181 ln -s ${self.channelstream}/bin/channelstream $out/bin/
178 ln -s ${self.channelstream}/bin/channelstream $out/bin/
182 ln -s ${self.pyramid}/bin/* $out/bin/ #*/
179 ln -s ${self.pyramid}/bin/* $out/bin/ #*/
183
180
184 # rhodecode-tools
181 # rhodecode-tools
185 # TODO: johbo: re-think this. Do the tools import anything from enterprise?
182 # TODO: johbo: re-think this. Do the tools import anything from enterprise?
186 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
183 ln -s ${self.rhodecode-tools}/bin/rhodecode-* $out/bin/
187
184
188 # note that condition should be restricted when adding further tools
185 # note that condition should be restricted when adding further tools
189 for file in $out/bin/*; do #*/
186 for file in $out/bin/*; do #*/
190 wrapProgram $file \
187 wrapProgram $file \
191 --prefix PYTHONPATH : $PYTHONPATH \
188 --prefix PYTHONPATH : $PYTHONPATH \
192 --prefix PATH : $PATH \
189 --prefix PATH : $PATH \
193 --set PYTHONHASHSEED random
190 --set PYTHONHASHSEED random
194 done
191 done
195
192
196 mkdir $out/etc
193 mkdir $out/etc
197 cp configs/production.ini $out/etc
194 cp configs/production.ini $out/etc
198
195
199 echo "Writing meta information for rccontrol to nix-support/rccontrol"
196 echo "Writing meta information for rccontrol to nix-support/rccontrol"
200 mkdir -p $out/nix-support/rccontrol
197 mkdir -p $out/nix-support/rccontrol
201 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
198 cp -v rhodecode/VERSION $out/nix-support/rccontrol/version
202 echo "DONE: Meta information for rccontrol written"
199 echo "DONE: Meta information for rccontrol written"
203
200
204 # TODO: johbo: Make part of ac-tests
201 # TODO: johbo: Make part of ac-tests
205 if [ ! -f rhodecode/public/js/scripts.js ]; then
202 if [ ! -f rhodecode/public/js/scripts.js ]; then
206 echo "Missing scripts.js"
203 echo "Missing scripts.js"
207 exit 1
204 exit 1
208 fi
205 fi
209 if [ ! -f rhodecode/public/css/style.css ]; then
206 if [ ! -f rhodecode/public/css/style.css ]; then
210 echo "Missing style.css"
207 echo "Missing style.css"
211 exit 1
208 exit 1
212 fi
209 fi
213 '';
210 '';
214
211
215 });
212 });
216
213
217 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
214 rhodecode-testdata = import "${rhodecode-testdata-src}/default.nix" {
218 inherit
215 inherit
219 doCheck
216 doCheck
220 pkgs
217 pkgs
221 pythonPackages;
218 pythonPackages;
222 };
219 };
223
220
224 };
221 };
225
222
226 rhodecode-testdata-src = sources.rhodecode-testdata or (
223 rhodecode-testdata-src = sources.rhodecode-testdata or (
227 pkgs.fetchhg {
224 pkgs.fetchhg {
228 url = "https://code.rhodecode.com/upstream/rc_testdata";
225 url = "https://code.rhodecode.com/upstream/rc_testdata";
229 rev = "v0.8.0";
226 rev = "v0.9.0";
230 sha256 = "0hy1ba134rq2f9si85yx7j4qhc9ky0hjzdk553s3q026i7km809m";
227 sha256 = "0k0ccb7cncd6mmzwckfbr6l7fsymcympwcm948qc3i0f0m6bbg1y";
231 });
228 });
232
229
233 # Apply all overrides and fix the final package set
230 # Apply all overrides and fix the final package set
234 myPythonPackagesUnfix =
231 myPythonPackagesUnfix = with pkgs.lib;
235 (extends pythonExternalOverrides
232 (extends pythonExternalOverrides
236 (extends pythonLocalOverrides
233 (extends pythonLocalOverrides
237 (extends pythonOverrides
234 (extends pythonOverrides
238 pythonGeneratedPackages)));
235 pythonGeneratedPackages)));
239 myPythonPackages = (fix myPythonPackagesUnfix);
236 myPythonPackages = (pkgs.lib.fix myPythonPackagesUnfix);
240
237
241 in myPythonPackages.rhodecode-enterprise-ce
238 in myPythonPackages.rhodecode-enterprise-ce
@@ -1,222 +1,240 b''
1 .. _admin-tricks:
1 .. _admin-tricks:
2
2
3 One-time Admin Tasks
3 One-time Admin Tasks
4 --------------------
4 --------------------
5
5
6 * :ref:`web-analytics`
6 * :ref:`web-analytics`
7 * :ref:`admin-tricks-license`
7 * :ref:`admin-tricks-license`
8 * :ref:`announcements`
8 * :ref:`announcements`
9 * :ref:`md-rst`
9 * :ref:`md-rst`
10 * :ref:`repo-stats`
10 * :ref:`repo-stats`
11 * :ref:`server-side-merge`
11 * :ref:`server-side-merge`
12 * :ref:`remap-rescan`
12 * :ref:`remap-rescan`
13 * :ref:`custom-hooks`
13 * :ref:`custom-hooks`
14 * :ref:`clear-repo-cache`
14 * :ref:`clear-repo-cache`
15 * :ref:`set-repo-pub`
15 * :ref:`set-repo-pub`
16 * :ref:`ping`
16 * :ref:`ping`
17
17
18 .. _web-analytics:
18 .. _web-analytics:
19
19
20 Adding Web Analytics
20 Adding Web Analytics
21 ^^^^^^^^^^^^^^^^^^^^
21 ^^^^^^^^^^^^^^^^^^^^
22
22
23 If you wish to add a Google Analytics, or any other kind of tracker to your
23 If you wish to add a Google Analytics, or any other kind of tracker to your
24 |RCE| instance you can add the necessary codes to the header or footer
24 |RCE| instance you can add the necessary codes to the header or footer
25 section of each instance using the following steps:
25 section of each instance using the following steps:
26
26
27 1. From the |RCE| interface, select
27 1. From the |RCE| interface, select
28 :menuselection:`Admin --> Settings --> Global`
28 :menuselection:`Admin --> Settings --> Global`
29 2. To add a tracking code to you instance, enter it in the header or footer
29 2. To add a tracking code to you instance, enter it in the header or footer
30 section and select **Save**
30 section and select **Save**
31
31
32 Use the example templates in the drop-down menu to set up your configuration.
32 Use the example templates in the drop-down menu to set up your configuration.
33
33
34 .. _admin-tricks-license:
34 .. _admin-tricks-license:
35
35
36 Licence Key Management
36 Licence Key Management
37 ^^^^^^^^^^^^^^^^^^^^^^
37 ^^^^^^^^^^^^^^^^^^^^^^
38
38
39 To manage your license key, go to
39 To manage your license key, go to
40 :menuselection:`Admin --> Settings --> License`.
40 :menuselection:`Admin --> Settings --> License`.
41 On this page you can see the license key details. If you need a new license,
41 On this page you can see the license key details. If you need a new license,
42 or have questions about your current one, contact support@rhodecode.com
42 or have questions about your current one, contact support@rhodecode.com
43
43
44 .. _announcements:
44 .. _announcements:
45
45
46 Server-wide Announcements
46 Server-wide Announcements
47 ^^^^^^^^^^^^^^^^^^^^^^^^^
47 ^^^^^^^^^^^^^^^^^^^^^^^^^
48
48
49 If you need to make a server-wide announcement to all users,
49 If you need to make a server-wide announcement to all users,
50 you can add a message to be displayed using the following steps:
50 you can add a message to be displayed using the following steps:
51
51
52 1. From the |RCE| interface, select
52 1. From the |RCE| interface, select
53 :menuselection:`Admin --> Settings --> Global`
53 :menuselection:`Admin --> Settings --> Global`
54 2. To add a message that will be displayed to all users,
54 2. To add a message that will be displayed to all users,
55 select :guilabel:`Server Announcement` from the drop-down menu and
55 select :guilabel:`Server Announcement` from the drop-down menu and
56 change the ``var message = "TYPE YOUR MESSAGE HERE";`` example line.
56 change the ``var message = "TYPE YOUR MESSAGE HERE";`` example line.
57 3. Select :guilabel:`Save`, and you will see the message once your page
57 3. Select :guilabel:`Save`, and you will see the message once your page
58 refreshes.
58 refreshes.
59
59
60 .. image:: ../images/server-wide-announcement.png
60 .. image:: ../images/server-wide-announcement.png
61 :alt: Server Wide Announcement
61 :alt: Server Wide Announcement
62
62
63 .. _md-rst:
63 .. _md-rst:
64
64
65
66 Suppress license warnings or errors
67 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
68
69 In case you're running on maximum allowed users, RhodeCode will display a
70 warning message on pages that you're close to the license limits.
71 It's often not desired to show that all the time. Here's how you can suppress
72 the license messages.
73
74 1. From the |RCE| interface, select
75 :menuselection:`Admin --> Settings --> Global`
76 2. Select :guilabel:`Flash message filtering` from the drop-down menu.
77 3. Select :guilabel:`Save`, and you will no longer see the license message
78 once your page refreshes.
79
80 .. _admin-tricks-suppress-license-messages:
81
82
65 Markdown or RST Rendering
83 Markdown or RST Rendering
66 ^^^^^^^^^^^^^^^^^^^^^^^^^
84 ^^^^^^^^^^^^^^^^^^^^^^^^^
67
85
68 |RCE| can use `Markdown`_ or `reStructured Text`_ in commit message,
86 |RCE| can use `Markdown`_ or `reStructured Text`_ in commit message,
69 code review messages, and inline comments. To set the default to either,
87 code review messages, and inline comments. To set the default to either,
70 select your preference from the drop-down menu on the
88 select your preference from the drop-down menu on the
71 :menuselection:`Admin --> Settings --> Visual` page and select
89 :menuselection:`Admin --> Settings --> Visual` page and select
72 :guilabel:`Save settings`.
90 :guilabel:`Save settings`.
73
91
74 .. _repo-stats:
92 .. _repo-stats:
75
93
76 Enabling Repository Statistics
94 Enabling Repository Statistics
77 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
95 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
78
96
79 To enable |repo| statistics, use the following steps:
97 To enable |repo| statistics, use the following steps:
80
98
81 1. From the |RCE| interface, open
99 1. From the |RCE| interface, open
82 :menuselection:`Admin --> Repositories` and select
100 :menuselection:`Admin --> Repositories` and select
83 :guilabel:`Edit` beside the |repo| for which you wish to enable statistics.
101 :guilabel:`Edit` beside the |repo| for which you wish to enable statistics.
84 2. Check the :guilabel:`Enable statistics` box, and select :guilabel:`Save`
102 2. Check the :guilabel:`Enable statistics` box, and select :guilabel:`Save`
85
103
86 .. _server-side-merge:
104 .. _server-side-merge:
87
105
88 Enabling Server-side Merging
106 Enabling Server-side Merging
89 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
107 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
90
108
91 To enable server-side merging, use the following steps:
109 To enable server-side merging, use the following steps:
92
110
93 1. From the |RCE| interface, open :menuselection:`Admin --> Settings --> VCS`
111 1. From the |RCE| interface, open :menuselection:`Admin --> Settings --> VCS`
94 2. Check the :guilabel:`Server-side merge` box, and select
112 2. Check the :guilabel:`Server-side merge` box, and select
95 :guilabel:`Save Settings`
113 :guilabel:`Save Settings`
96
114
97 If you encounter slow performance with server-side merging enabled, check the
115 If you encounter slow performance with server-side merging enabled, check the
98 speed at which your server is performing actions. When server-side merging is
116 speed at which your server is performing actions. When server-side merging is
99 enabled, the following actions occurs on the server.
117 enabled, the following actions occurs on the server.
100
118
101 * A |pr| is created in the database.
119 * A |pr| is created in the database.
102 * A shadow |repo| is created as a working environment for the |pr|.
120 * A shadow |repo| is created as a working environment for the |pr|.
103 * On display, |RCE| checks if the |pr| can be merged.
121 * On display, |RCE| checks if the |pr| can be merged.
104
122
105 To check how fast the shadow |repo| creation is occurring on your server, use
123 To check how fast the shadow |repo| creation is occurring on your server, use
106 the following steps:
124 the following steps:
107
125
108 1. Log into your server and create a directory in your |repos| folder.
126 1. Log into your server and create a directory in your |repos| folder.
109 2. Clone a |repo| that is showing slow performance and time the action.
127 2. Clone a |repo| that is showing slow performance and time the action.
110
128
111 .. code-block:: bash
129 .. code-block:: bash
112
130
113 # One option is to use the time command
131 # One option is to use the time command
114 $ time hg clone SOURCE_REPO TARGET
132 $ time hg clone SOURCE_REPO TARGET
115
133
116 .. _remap-rescan:
134 .. _remap-rescan:
117
135
118 Remap and Rescan Repositories
136 Remap and Rescan Repositories
119 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
137 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
120
138
121 You may want to Remap and rescan the |repos| that |RCE| is managing to ensure
139 You may want to Remap and rescan the |repos| that |RCE| is managing to ensure
122 the system is always up-to-date. This is useful after importing, deleting,
140 the system is always up-to-date. This is useful after importing, deleting,
123 or carrying out general cleaning up operations. To do this use the
141 or carrying out general cleaning up operations. To do this use the
124 following steps:
142 following steps:
125
143
126 1. From the |RCE|, open
144 1. From the |RCE|, open
127 :menuselection:`Admin --> Settings --> Remap and rescan`
145 :menuselection:`Admin --> Settings --> Remap and rescan`
128 2. Click :guilabel:`Rescan Repositories`
146 2. Click :guilabel:`Rescan Repositories`
129
147
130 Check the additional options if needed:
148 Check the additional options if needed:
131
149
132 * :guilabel:`Destroy old data`: Useful for purging deleted repository
150 * :guilabel:`Destroy old data`: Useful for purging deleted repository
133 information from the database.
151 information from the database.
134 * :guilabel:`Invalidate cache for all repositories`: Use this to completely
152 * :guilabel:`Invalidate cache for all repositories`: Use this to completely
135 remap all |repos|. Useful when importing or migrating |repos| to ensure all
153 remap all |repos|. Useful when importing or migrating |repos| to ensure all
136 new information is picked up.
154 new information is picked up.
137
155
138 .. _custom-hooks:
156 .. _custom-hooks:
139
157
140 Adding Custom Hooks
158 Adding Custom Hooks
141 ^^^^^^^^^^^^^^^^^^^
159 ^^^^^^^^^^^^^^^^^^^
142
160
143 To add custom hooks to your instance, use the following steps:
161 To add custom hooks to your instance, use the following steps:
144
162
145 1. Open :menuselection:`Admin --> Settings --> Hooks`
163 1. Open :menuselection:`Admin --> Settings --> Hooks`
146 2. Add your custom hook details, you can use a file path to specify custom
164 2. Add your custom hook details, you can use a file path to specify custom
147 hook scripts, for example: ``python:/path/to/custom_hook.py``
165 hook scripts, for example: ``python:/path/to/custom_hook.py``
148 3. Select :guilabel:`Save`
166 3. Select :guilabel:`Save`
149
167
150 Also, see the |RC| Extensions section of the :ref:`rc-tools` guide. |RC|
168 Also, see the |RC| Extensions section of the :ref:`rc-tools` guide. |RC|
151 Extensions can be used to add additional hooks to your instance and comes
169 Extensions can be used to add additional hooks to your instance and comes
152 with a number of pre-built plugins if you chose to install them.
170 with a number of pre-built plugins if you chose to install them.
153
171
154 .. _clear-repo-cache:
172 .. _clear-repo-cache:
155
173
156 Clearing |repo| cache
174 Clearing |repo| cache
157 ^^^^^^^^^^^^^^^^^^^^^
175 ^^^^^^^^^^^^^^^^^^^^^
158
176
159 If you need to clear the cache for a particular |repo|, use the following steps:
177 If you need to clear the cache for a particular |repo|, use the following steps:
160
178
161 1. Open :menuselection:`Admin --> Repositories` and select :guilabel:`Edit`
179 1. Open :menuselection:`Admin --> Repositories` and select :guilabel:`Edit`
162 beside the |repo| whose cache you wish to clear.
180 beside the |repo| whose cache you wish to clear.
163 2. On the |repo| settings page, go to the :guilabel:`Caches` tab and select
181 2. On the |repo| settings page, go to the :guilabel:`Caches` tab and select
164 :guilabel:`Invalidate repository cache`.
182 :guilabel:`Invalidate repository cache`.
165
183
166 .. _set-lang:
184 .. _set-lang:
167
185
168 Changing Default Language
186 Changing Default Language
169 ^^^^^^^^^^^^^^^^^^^^^^^^^
187 ^^^^^^^^^^^^^^^^^^^^^^^^^
170
188
171 To change the default language of a |RCE| instance, change the language code
189 To change the default language of a |RCE| instance, change the language code
172 in the :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. To
190 in the :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file. To
173 do this, use the following steps.
191 do this, use the following steps.
174
192
175 1. Open the :file:`rhodecode.ini` file and set the required language code.
193 1. Open the :file:`rhodecode.ini` file and set the required language code.
176
194
177 .. code-block:: ini
195 .. code-block:: ini
178
196
179 ## Optional Languages
197 ## Optional Languages
180 ## en(default), de, fr, it, ja, pl, pt, ru, zh
198 ## en(default), de, fr, it, ja, pl, pt, ru, zh
181 lang = de
199 lang = de
182
200
183 2. Restart the |RCE| instance and check that the language has been updated.
201 2. Restart the |RCE| instance and check that the language has been updated.
184
202
185 .. code-block:: bash
203 .. code-block:: bash
186
204
187 $ rccontrol restart enterprise-2
205 $ rccontrol restart enterprise-2
188 Instance "enterprise-2" successfully stopped.
206 Instance "enterprise-2" successfully stopped.
189 Instance "enterprise-2" successfully started.
207 Instance "enterprise-2" successfully started.
190
208
191 .. image:: ../images/language.png
209 .. image:: ../images/language.png
192
210
193 .. _set-repo-pub:
211 .. _set-repo-pub:
194
212
195 Setting Repositories to Publish
213 Setting Repositories to Publish
196 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
214 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
197
215
198 To automatically promote your local |repos| to public after pushing to |RCE|,
216 To automatically promote your local |repos| to public after pushing to |RCE|,
199 enable the :guilabel:`Set repositories as publishing` option on the
217 enable the :guilabel:`Set repositories as publishing` option on the
200 :menuselection:`Admin --> Settings --> VCS` page.
218 :menuselection:`Admin --> Settings --> VCS` page.
201
219
202 .. note::
220 .. note::
203
221
204 This option is enabled by default on most |RCE| versions, but if upgrading
222 This option is enabled by default on most |RCE| versions, but if upgrading
205 from a 1.7.x version it could be disabled on upgrade due to inheriting
223 from a 1.7.x version it could be disabled on upgrade due to inheriting
206 older default settings.
224 older default settings.
207
225
208 .. _ping:
226 .. _ping:
209
227
210 Pinging the |RCE| Server
228 Pinging the |RCE| Server
211 ^^^^^^^^^^^^^^^^^^^^^^^^
229 ^^^^^^^^^^^^^^^^^^^^^^^^
212
230
213 You can check the IP Address of your |RCE| instance using the
231 You can check the IP Address of your |RCE| instance using the
214 following URL: ``{instance-URL}/_admin/ping``.
232 following URL: ``{instance-URL}/_admin/ping``.
215
233
216 .. code-block:: bash
234 .. code-block:: bash
217
235
218 $ curl https://your.rhodecode.url/_admin/ping
236 $ curl https://your.rhodecode.url/_admin/ping
219 pong[rce-7880] => 203.0.113.23
237 pong[rce-7880] => 203.0.113.23
220
238
221 .. _Markdown: http://daringfireball.net/projects/markdown/
239 .. _Markdown: http://daringfireball.net/projects/markdown/
222 .. _reStructured Text: http://docutils.sourceforge.net/docs/index.html
240 .. _reStructured Text: http://docutils.sourceforge.net/docs/index.html
@@ -1,33 +1,34 b''
1 .. _apache-sub-ref:
1 .. _apache-sub-ref:
2
2
3 Apache URL Prefix Configuration
3 Apache URL Prefix Configuration
4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5
5
6 Use the following example to configure Apache to use a URL prefix.
6 Use the following example to configure Apache to use a URL prefix.
7
7
8 .. code-block:: apache
8 .. code-block:: apache
9
9
10 <Location /<someprefix> > # Change <someprefix> into your chosen prefix
10 <Location /<someprefix>/ # Change <someprefix> into your chosen prefix
11 ProxyPass http://127.0.0.1:5000/<someprefix>
11 ProxyPreserveHost On
12 ProxyPassReverse http://127.0.0.1:5000/<someprefix>
12 ProxyPass "http://127.0.0.1:5000/"
13 SetEnvIf X-Url-Scheme https HTTPS=1
13 ProxyPassReverse "http://127.0.0.1:5000/"
14 Header set X-Url-Scheme https env=HTTPS
14 </Location>
15 </Location>
15
16
16 In addition to the regular Apache setup you will need to add the following
17 In addition to the regular Apache setup you will need to add the following
17 lines into the ``rhodecode.ini`` file.
18 lines into the ``rhodecode.ini`` file.
18
19
19 * Above ``[app:main]`` section of the ``rhodecode.ini`` file add the
20 * Above ``[app:main]`` section of the ``rhodecode.ini`` file add the
20 following section if it doesn't exist yet.
21 following section if it doesn't exist yet.
21
22
22 .. code-block:: ini
23 .. code-block:: ini
23
24
24 [filter:proxy-prefix]
25 [filter:proxy-prefix]
25 use = egg:PasteDeploy#prefix
26 use = egg:PasteDeploy#prefix
26 prefix = /<someprefix> # Change <someprefix> into your chosen prefix
27 prefix = /<someprefix> # Change <someprefix> into your chosen prefix
27
28
28 * In the the ``[app:main]`` section of your ``rhodecode.ini`` file add the
29 * In the the ``[app:main]`` section of your ``rhodecode.ini`` file add the
29 following line.
30 following line.
30
31
31 .. code-block:: ini
32 .. code-block:: ini
32
33
33 filter-with = proxy-prefix
34 filter-with = proxy-prefix
@@ -1,127 +1,151 b''
1 .. _backup-ref:
1 .. _backup-ref:
2
2
3 Backup and Restore
3 Backup and Restore
4 ==================
4 ==================
5
5
6 *“The condition of any backup is unknown until a restore is attempted.”*
6 *“The condition of any backup is unknown until a restore is attempted.”*
7 `Schrödinger's Backup`_
7 `Schrödinger's Backup`_
8
8
9 To snapshot an instance of |RCE|, and save its settings, you need to backup the
9 To snapshot an instance of |RCE|, and save its settings, you need to backup the
10 following parts of the system at the same time.
10 following parts of the system at the same time.
11
11
12 * The |repos| managed by the instance.
12 * The |repos| managed by the instance together with the stored Gists.
13 * The |RCE| database.
13 * The |RCE| database.
14 * Any configuration files or extensions that you've configured.
14 * Any configuration files or extensions that you've configured. In most
15 cases it's only the :file:`rhodecode.ini` file.
16 * Installer files such as those in `/opt/rhodecode` can be backed-up, however
17 it's not required since in case of a recovery installer simply
18 re-creates those.
19
15
20
16 .. important::
21 .. important::
17
22
18 Ideally you should script all of these functions so that it creates a
23 Ideally you should script all of these functions so that it creates a
19 backup snapshot of your system at a particular timestamp and then run that
24 backup snapshot of your system at a particular timestamp and then run that
20 script regularly.
25 script regularly.
21
26
22 Backup Details
27 Backup Details
23 --------------
28 --------------
24
29
25 To backup the relevant parts of |RCE| required to restore your system, use
30 To backup the relevant parts of |RCE| required to restore your system, use
26 the information in this section to identify what is important to you.
31 the information in this section to identify what is important to you.
27
32
28 Repository Backup
33 Repository Backup
29 ^^^^^^^^^^^^^^^^^
34 ^^^^^^^^^^^^^^^^^
30
35
31 To back up your |repos|, use the API to get a list of all |repos| managed,
36 To back up your |repos|, use the API to get a list of all |repos| managed,
32 and then clone them to your backup location.
37 and then clone them to your backup location. This is the most safe backup option.
38 Backing up the storage directory could potentially result in a backup of
39 partially committed files or commits. (Backup taking place during a big push)
40 As an alternative you could use a rsync or simple `cp` commands if you can
41 ensure your instance is only in read-only mode or stopped at the moment.
42
33
43
34 Use the ``get_repos`` method to list all your managed |repos|,
44 Use the ``get_repos`` method to list all your managed |repos|,
35 and use the ``clone_uri`` information that is returned. See the :ref:`api`
45 and use the ``clone_uri`` information that is returned. See the :ref:`api`
36 for more information.
46 for more information. Be sure to keep the structure or repositories with their
47 repository groups.
37
48
38 .. important::
49 .. important::
39
50
40 This will not work for |svn| |repos|. Currently the only way to back up
51 This will not work for |svn| |repos|. Currently the only way to back up
41 your |svn| |repos| is to make a copy of them.
52 your |svn| |repos| is to make a copy of them.
42
53
43 It is also important to note, that you can only restore the |svn| |repos|
54 It is also important to note, that you can only restore the |svn| |repos|
44 using the same version as they were saved with.
55 using the same version as they were saved with.
45
56
46 Database Backup
57 Database Backup
47 ^^^^^^^^^^^^^^^
58 ^^^^^^^^^^^^^^^
48
59
49 The instance database contains all the |RCE| permissions settings,
60 The instance database contains all the |RCE| permissions settings,
50 and user management information. To backup your database,
61 and user management information. To backup your database,
51 export it using the following appropriate example, and then move it to your
62 export it using the following appropriate example, and then move it to your
52 backup location:
63 backup location:
53
64
54 .. code-block:: bash
65 .. code-block:: bash
55
66
56 # For MySQL DBs
67 # For MySQL DBs
57 $ mysqldump -u <uname> -p <pass> db_name > mysql-db-backup
68 $ mysqldump -u <uname> -p <pass> rhodecode_db_name > mysql-db-backup
69 # MySQL restore command
70 $ mysql -u <uname> -p <pass> rhodecode_db_name < mysql-db-backup
58
71
59 # For PostgreSQL DBs
72 # For PostgreSQL DBs
60 $ pg_dump dbname > postgresql-db-backup
73 $ PGPASSWORD=<pass> pg_dump rhodecode_db_name > postgresql-db-backup
74 # PosgreSQL restore
75 $ PGPASSWORD=<pass> psql -U <uname> -h localhost -d rhodecode_db_name -1 -f postgresql-db-backup
61
76
62 # For SQLlite
77 # For SQLite
63 $ sqlite3 rhodecode.db ‘.dump’ > sqlite-db-backup
78 $ sqlite3 rhodecode.db ‘.dump’ > sqlite-db-backup
79 # SQLite restore
80 $ copy sqlite-db-backup rhodecode.db
64
81
65
82
66 The default |RCE| SQLite database location is
83 The default |RCE| SQLite database location is
67 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
84 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.db`
68
85
69 If running MySQL or PostgreSQL databases, you will have configured these
86 If running MySQL or PostgreSQL databases, you will have configured these
70 separately, for more information see :ref:`rhodecode-database-ref`
87 separately, for more information see :ref:`rhodecode-database-ref`
71
88
72 Configuration File Backup
89 Configuration File Backup
73 ^^^^^^^^^^^^^^^^^^^^^^^^^
90 ^^^^^^^^^^^^^^^^^^^^^^^^^
74
91
75 Depending on your setup, you could have a number of configuration files that
92 Depending on your setup, you could have a number of configuration files that
76 should be backed up. You may have some, or all of the configuration files
93 should be backed up. You may have some, or all of the configuration files
77 listed in the :ref:`config-rce-files` section. Ideally you should back these
94 listed in the :ref:`config-rce-files` section. Ideally you should back these
78 up at the same time as the database and |repos|.
95 up at the same time as the database and |repos|. It really depends on if you need
96 the configuration file like logs, custom modules. We always recommend backing
97 those up.
79
98
80 Gist Backup
99 Gist Backup
81 ^^^^^^^^^^^
100 ^^^^^^^^^^^
82
101
83 To backup the gists on your |RCE| instance you can use the ``get_users`` and
102 To backup the gists on your |RCE| instance you usually have to backup the
84 ``get_gists`` API methods to fetch the gists for each user on the instance.
103 gist storage path. If this haven't been changed it's located inside
104 :file:`.rc_gist_store` and the metadata in :file:`.rc_gist_metadata`.
105 You can use the ``get_users`` and ``get_gists`` API methods to fetch the
106 gists for each user on the instance.
85
107
86 Extension Backups
108 Extension Backups
87 ^^^^^^^^^^^^^^^^^
109 ^^^^^^^^^^^^^^^^^
88
110
89 You should also backup any extensions added in the
111 You should also backup any extensions added in the
90 :file:`home/{user}/.rccontrol/{instance-id}/rcextensions` directory.
112 :file:`home/{user}/.rccontrol/{instance-id}/rcextensions` directory.
91
113
92 Full-text Search Backup
114 Full-text Search Backup
93 ^^^^^^^^^^^^^^^^^^^^^^^
115 ^^^^^^^^^^^^^^^^^^^^^^^
94
116
95 You may also have full text search set up, but the index can be rebuild from
117 You may also have full text search set up, but the index can be rebuild from
96 re-imported |repos| if necessary. You will most likely want to backup your
118 re-imported |repos| if necessary. You will most likely want to backup your
97 :file:`mapping.ini` file if you've configured that. For more information, see
119 :file:`mapping.ini` file if you've configured that. For more information, see
98 the :ref:`indexing-ref` section.
120 the :ref:`indexing-ref` section.
99
121
100 Restoration Steps
122 Restoration Steps
101 -----------------
123 -----------------
102
124
103 To restore an instance of |RCE| from its backed up components, use the
125 To restore an instance of |RCE| from its backed up components, to a fresh
104 following steps.
126 system use the following steps.
105
127
106 1. Install a new instance of |RCE|.
128 1. Install a new instance of |RCE| using sqlite option as database.
107 2. Once installed, configure the instance to use the backed up
129 2. Restore your database.
108 :file:`rhodecode.ini` file. Ensure this file points to the backed up
130 3. Once installed, replace you backed up the :file:`rhodecode.ini` with your
131 backup version. Ensure this file points to the restored
109 database, see the :ref:`config-database` section.
132 database, see the :ref:`config-database` section.
110 3. Restart |RCE| and remap and rescan your |repos|, see the
133 4. Restart |RCE| and remap and rescan your |repos| to verify filesystem access,
111 :ref:`remap-rescan` section.
134 see the :ref:`remap-rescan` section.
135
112
136
113 Post Restoration Steps
137 Post Restoration Steps
114 ^^^^^^^^^^^^^^^^^^^^^^
138 ^^^^^^^^^^^^^^^^^^^^^^
115
139
116 Once you have restored your |RCE| instance to basic functionality, you can
140 Once you have restored your |RCE| instance to basic functionality, you can
117 then work on restoring any specific setup changes you had made.
141 then work on restoring any specific setup changes you had made.
118
142
119 * To recreate the |RCE| index, use the backed up :file:`mapping.ini` file if
143 * To recreate the |RCE| index, use the backed up :file:`mapping.ini` file if
120 you had made changes and rerun the indexer. See the
144 you had made changes and rerun the indexer. See the
121 :ref:`indexing-ref` section for details.
145 :ref:`indexing-ref` section for details.
122 * To reconfigure any extensions, copy the backed up extensions into the
146 * To reconfigure any extensions, copy the backed up extensions into the
123 :file:`/home/{user}/.rccontrol/{instance-id}/rcextensions` and also specify
147 :file:`/home/{user}/.rccontrol/{instance-id}/rcextensions` and also specify
124 any custom hooks if necessary. See the :ref:`extensions-hooks-ref` section for
148 any custom hooks if necessary. See the :ref:`extensions-hooks-ref` section for
125 details.
149 details.
126
150
127 .. _Schrödinger's Backup: http://novabackup.novastor.com/blog/schrodingers-backup-good-bad-backup/
151 .. _Schrödinger's Backup: http://novabackup.novastor.com/blog/schrodingers-backup-good-bad-backup/
@@ -1,95 +1,119 b''
1 .. _rhodecode-reset-ref:
1 .. _rhodecode-reset-ref:
2
2
3 Settings Management
3 Settings Management
4 -------------------
4 -------------------
5
5
6 All |RCE| settings can be set from the user interface, but in the event that
6 All |RCE| settings can be set from the user interface, but in the event that
7 it somehow becomes unavailable you can use ``ishell`` inside your |RCE|
7 it somehow becomes unavailable you can use ``ishell`` inside your |RCE|
8 ``virtualenv`` to carry out emergency measures.
8 ``virtualenv`` to carry out emergency measures.
9
9
10 .. warning::
10 .. warning::
11
11
12 Logging into the |RCE| database with ``iShell`` should only be done by an
12 Logging into the |RCE| database with ``iShell`` should only be done by an
13 experienced and knowledgeable database administrator.
13 experienced and knowledgeable database administrator.
14
14
15 Reset Admin Account Privileges
15 Reset Admin Account Privileges
16 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17
17
18 If you accidentally remove your admin privileges from the admin account you
18 If you accidentally remove your admin privileges from the admin account you
19 can restore them using ``ishell``. Use the following example to reset your
19 can restore them using ``ishell``. Use the following example to reset your
20 account permissions.
20 account permissions.
21
21
22 .. code-block:: bash
22 .. code-block:: bash
23
23
24 # Open iShell from the terminal
24 # Open iShell from the terminal
25 $ .rccontrol/enterprise-5/profile/bin/paster \
25 $ .rccontrol/enterprise-1/profile/bin/paster \
26 ishell .rccontrol/enterprise-5/rhodecode.ini
26 ishell .rccontrol/enterprise-1/rhodecode.ini
27
27
28 .. code-block:: mysql
28 .. code-block:: mysql
29
29
30 # Use this example to change user permissions
30 # Use this example to change user permissions
31 In [1]: adminuser = User.get_by_username('username')
31 In [1]: adminuser = User.get_by_username('username')
32 In [2]: adminuser.admin = True
32 In [2]: adminuser.admin = True
33 In [3]: Session().add(adminuser);Session().commit()
33 In [3]: Session().add(adminuser);Session().commit()
34 In [4]: exit()
34 In [4]: exit()
35
35
36 Set to read global ``.hgrc`` file
36 Set to read global ``.hgrc`` file
37 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
37 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
38
38
39 By default, |RCE| does not read global ``hgrc`` files in
39 By default, |RCE| does not read global ``hgrc`` files in
40 ``/etc/mercurial/hgrc`` or ``/etc/mercurial/hgrc.d`` because it
40 ``/etc/mercurial/hgrc`` or ``/etc/mercurial/hgrc.d`` because it
41 can lead to issues. This is set in the ``rhodecode_ui`` table for which
41 can lead to issues. This is set in the ``rhodecode_ui`` table for which
42 there is no UI. If you need to edit this you can
42 there is no UI. If you need to edit this you can
43 manually change the settings using SQL statements with ``ishell``. Use the
43 manually change the settings using SQL statements with ``ishell``. Use the
44 following example to make changes to this table.
44 following example to make changes to this table.
45
45
46 .. code-block:: bash
46 .. code-block:: bash
47
47
48 # Open iShell from the terminal
48 # Open iShell from the terminal
49 $ .rccontrol/enterprise-5/profile/bin/paster \
49 $ .rccontrol/enterprise-5/profile/bin/paster \
50 ishell.rccontrol/enterprise-5/rhodecode.ini
50 ishell.rccontrol/enterprise-5/rhodecode.ini
51
51
52 .. code-block:: mysql
52 .. code-block:: mysql
53
53
54 # Use this example to enable global .hgrc access
54 # Use this example to enable global .hgrc access
55 In [4]: new_option = RhodeCodeUi()
55 In [1]: new_option = RhodeCodeUi()
56 In [5]: new_option.ui_section='web'
56 In [2]: new_option.ui_section='web'
57 In [6]: new_option.ui_key='allow_push'
57 In [3]: new_option.ui_key='allow_push'
58 In [7]: new_option.ui_value='*'
58 In [4]: new_option.ui_value='*'
59 In [8]: Session().add(new_option);Session().commit()
59 In [5]: Session().add(new_option);Session().commit()
60 In [6]: exit()
60
61
61 Manually Reset Password
62 Manually Reset Password
62 ^^^^^^^^^^^^^^^^^^^^^^^
63 ^^^^^^^^^^^^^^^^^^^^^^^
63
64
64 If you need to manually reset a user password, use the following steps.
65 If you need to manually reset a user password, use the following steps.
65
66
66 1. Navigate to your |RCE| install location.
67 1. Navigate to your |RCE| install location.
67 2. Run the interactive ``ishell`` prompt.
68 2. Run the interactive ``ishell`` prompt.
68 3. Set a new password.
69 3. Set a new password.
69
70
70 Use the following code example to carry out these steps.
71 Use the following code example to carry out these steps.
71
72
72 .. code-block:: bash
73 .. code-block:: bash
73
74
74 # starts the ishell interactive prompt
75 # starts the ishell interactive prompt
75 $ .rccontrol/enterprise-5/profile/bin/paster \
76 $ .rccontrol/enterprise-1/profile/bin/paster \
76 ishell .rccontrol/enterprise-5/rhodecode.ini
77 ishell .rccontrol/enterprise-1/rhodecode.ini
77
78
78 .. code-block:: mysql
79 .. code-block:: mysql
79
80
80 from rhodecode.lib.auth import generate_auth_token
81 In [1]: from rhodecode.lib.auth import generate_auth_token
81 from rhodecode.lib.auth import get_crypt_password
82 In [2]: from rhodecode.lib.auth import get_crypt_password
82
83 # Enter the user name whose password you wish to change
83 # Enter the user name whose password you wish to change
84 my_user = 'USERNAME'
84 In [3]: my_user = 'USERNAME'
85 u = User.get_by_username(my_user)
85 In [4]: u = User.get_by_username(my_user)
86
87 # If this fails then the user does not exist
86 # If this fails then the user does not exist
88 u.auth_token = generate_auth_token(my_user)
87 In [5]: u.auth_token = generate_auth_token(my_user)
89
90 # Set the new password
88 # Set the new password
91 u.password = get_crypt_password('PASSWORD')
89 In [6]: u.password = get_crypt_password('PASSWORD')
90 In [7]: Session().add(u);Session().commit()
91 In [8]: exit()
92
93
94
95 Change user details
96 ^^^^^^^^^^^^^^^^^^^
97
98 If you need to manually change some of users details, use the following steps.
99
100 1. Navigate to your |RCE| install location.
101 2. Run the interactive ``ishell`` prompt.
102 3. Set a new arguments for users.
92
103
93 Session().add(u)
104 Use the following code example to carry out these steps.
94 Session().commit()
105
95 exit
106 .. code-block:: bash
107
108 # starts the ishell interactive prompt
109 $ .rccontrol/enterprise-1/profile/bin/paster \
110 ishell .rccontrol/enterprise-1/rhodecode.ini
111
112 .. code-block:: mysql
113
114 # Use this example to change email and username of LDAP user
115 In [1]: my_user = User.get_by_username('some_username')
116 In [2]: my_user.email = 'new_email@foobar.com'
117 In [3]: my_user.username = 'SomeUser'
118 In [4]: Session().add(my_user);Session().commit()
119 In [5]: exit()
@@ -1,179 +1,179 b''
1 .. _sec-your-server:
1 .. _sec-your-server:
2
2
3 Securing Your Server
3 Securing Your Server
4 --------------------
4 --------------------
5
5
6 |RCE| runs on your hardware, and while it is developed with security in mind
6 |RCE| runs on your hardware, and while it is developed with security in mind
7 it is also important that you ensure your servers are well secured. In this
7 it is also important that you ensure your servers are well secured. In this
8 section we will cover some basic security practices that are best to
8 section we will cover some basic security practices that are best to
9 configure when setting up your |RCE| instances.
9 configure when setting up your |RCE| instances.
10
10
11 SSH Keys
11 SSH Keys
12 ^^^^^^^^
12 ^^^^^^^^
13
13
14 Using SSH keys to access your server provides more security than using the
14 Using SSH keys to access your server provides more security than using the
15 standard username and password combination. To set up your SSH Keys, use the
15 standard username and password combination. To set up your SSH Keys, use the
16 following steps:
16 following steps:
17
17
18 1. On your local machine create the public/private key combination. The
18 1. On your local machine create the public/private key combination. The
19 private key you will keep, and the matching public key is copied to the
19 private key you will keep, and the matching public key is copied to the
20 server. Setting a passphrase here is optional, if you set one you will
20 server. Setting a passphrase here is optional, if you set one you will
21 always be prompted for it when logging in.
21 always be prompted for it when logging in.
22
22
23 .. code-block:: bash
23 .. code-block:: bash
24
24
25 # Generate SSH Keys
25 # Generate SSH Keys
26 user@ubuntu:~$ ssh-keygen -t rsa
26 user@ubuntu:~$ ssh-keygen -t rsa
27
27
28 .. code-block:: bash
28 .. code-block:: bash
29
29
30 Generating public/private rsa key pair.
30 Generating public/private rsa key pair.
31 Enter file in which to save the key (/home/user/.ssh/id_rsa):
31 Enter file in which to save the key (/home/user/.ssh/id_rsa):
32 Created directory '/home/user/.ssh'.
32 Created directory '/home/user/.ssh'.
33 Enter passphrase (empty for no passphrase):
33 Enter passphrase (empty for no passphrase):
34 Enter same passphrase again:
34 Enter same passphrase again:
35 Your identification has been saved in /home/user/.ssh/id_rsa.
35 Your identification has been saved in /home/user/.ssh/id_rsa.
36 Your public key has been saved in /home/user/.ssh/id_rsa.pub.
36 Your public key has been saved in /home/user/.ssh/id_rsa.pub.
37 The key fingerprint is:
37 The key fingerprint is:
38 02:82:38:95:e5:30:d2:ad:17:60:15:7f:94:17:9f:30 user@ubuntu
38 02:82:38:95:e5:30:d2:ad:17:60:15:7f:94:17:9f:30 user@ubuntu
39 The key's randomart image is:
39 The key\'s randomart image is:
40 +--[ RSA 2048]----+
40 +--[ RSA 2048]----+
41
41
42 2. SFTP to your server, and copy the public key to the ``~/.ssh`` folder.
42 2. SFTP to your server, and copy the public key to the ``~/.ssh`` folder.
43
43
44 .. code-block:: bash
44 .. code-block:: bash
45
45
46 # SFTP to your server
46 # SFTP to your server
47 $ sftp user@hostname
47 $ sftp user@hostname
48
48
49 # copy your public key
49 # copy your public key
50 sftp> mput /home/user/.ssh/id_rsa.pub /home/user/.ssh
50 sftp> mput /home/user/.ssh/id_rsa.pub /home/user/.ssh
51 Uploading /home/user/.ssh/id_rsa.pub to /home/user/.ssh/id_rsa.pub
51 Uploading /home/user/.ssh/id_rsa.pub to /home/user/.ssh/id_rsa.pub
52 /home/user/.ssh/id_rsa.pub 100% 394 0.4KB/s 00:00
52 /home/user/.ssh/id_rsa.pub 100% 394 0.4KB/s 00:00
53
53
54 3. On your server, add the public key to the :file:`~/.ssh/authorized_keys`
54 3. On your server, add the public key to the :file:`~/.ssh/authorized_keys`
55 file.
55 file.
56
56
57 .. code-block:: bash
57 .. code-block:: bash
58
58
59 $ cat /home/user/.ssh/id_rsa.pub > /home/user/.ssh/authorized_keys
59 $ cat /home/user/.ssh/id_rsa.pub > /home/user/.ssh/authorized_keys
60
60
61 You should now be able to log into your server using your SSH
61 You should now be able to log into your server using your SSH
62 Keys. If you've added a passphrase you'll be asked for it. For more
62 Keys. If you've added a passphrase you'll be asked for it. For more
63 information about using SSH keys with |RCE| |repos|, see the
63 information about using SSH keys with |RCE| |repos|, see the
64 :ref:`ssh-connection` section.
64 :ref:`ssh-connection` section.
65
65
66 VPN Whitelist
66 VPN Whitelist
67 ^^^^^^^^^^^^^
67 ^^^^^^^^^^^^^
68
68
69 Most company networks will have a VPN. If you need to set one up, there are
69 Most company networks will have a VPN. If you need to set one up, there are
70 many tutorials online for how to do that. Getting it right requires good
70 many tutorials online for how to do that. Getting it right requires good
71 knowledge and attention to detail. Once set up, you can configure your
71 knowledge and attention to detail. Once set up, you can configure your
72 |RCE| instances to only allow user access from the VPN, to do this see the
72 |RCE| instances to only allow user access from the VPN, to do this see the
73 :ref:`settip-ip-white` section.
73 :ref:`settip-ip-white` section.
74
74
75 Public Key Infrastructure and SSL/TLS Encryption
75 Public Key Infrastructure and SSL/TLS Encryption
76 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
76 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
77
77
78 Public key infrastructure (PKI) is a system that creates, manages, and
78 Public key infrastructure (PKI) is a system that creates, manages, and
79 validates certificates for identifying nodes on a network and encrypting
79 validates certificates for identifying nodes on a network and encrypting
80 communication between them. SSL or TLS certificates can be used to
80 communication between them. SSL or TLS certificates can be used to
81 authenticate different entities with one another. To read more about PKIs,
81 authenticate different entities with one another. To read more about PKIs,
82 see the `OpenSSL PKI tutorial`_ site, or this `Cloudflare PKI post`_.
82 see the `OpenSSL PKI tutorial`_ site, or this `Cloudflare PKI post`_.
83
83
84 If the network you are running is SSL/TLS encrypted, you can configure |RCE|
84 If the network you are running is SSL/TLS encrypted, you can configure |RCE|
85 to always use secure connections using the ``force_https`` and ``use_htsts``
85 to always use secure connections using the ``force_https`` and ``use_htsts``
86 options in the :file:`/home/user/.rccontrol/instance-id/rhodecode.ini` file.
86 options in the :file:`/home/user/.rccontrol/instance-id/rhodecode.ini` file.
87 For more details, see the :ref:`x-frame` section.
87 For more details, see the :ref:`x-frame` section.
88
88
89 FireWalls and Ports
89 FireWalls and Ports
90 ^^^^^^^^^^^^^^^^^^^
90 ^^^^^^^^^^^^^^^^^^^
91
91
92 Setting up a network firewall for your internal traffic is a good way
92 Setting up a network firewall for your internal traffic is a good way
93 of keeping it secure by blocking off any ports that should not be used.
93 of keeping it secure by blocking off any ports that should not be used.
94 Additionally, you can set non-default ports for certain functions which adds
94 Additionally, you can set non-default ports for certain functions which adds
95 an extra layer of security to your setup.
95 an extra layer of security to your setup.
96
96
97 A well configured firewall will restrict access to everything except the
97 A well configured firewall will restrict access to everything except the
98 services you need to remain open. By exposing fewer services you reduce the
98 services you need to remain open. By exposing fewer services you reduce the
99 number of potential vulnerabilities.
99 number of potential vulnerabilities.
100
100
101 There are a number of different firewall solutions, but for most Linux systems
101 There are a number of different firewall solutions, but for most Linux systems
102 using the built in `IpTables`_ firewall should suffice. On BSD systems you
102 using the built in `IpTables`_ firewall should suffice. On BSD systems you
103 can use `IPFILTER`_ or `IPFW`_. Use the following examples, and the IpTables
103 can use `IPFILTER`_ or `IPFW`_. Use the following examples, and the IpTables
104 documentation to configure your IP Tables on Ubuntu.
104 documentation to configure your IP Tables on Ubuntu.
105
105
106 Changing the default SSH port.
106 Changing the default SSH port.
107
107
108 .. code-block:: bash
108 .. code-block:: bash
109
109
110 # Open SSH config file and change to port 10022
110 # Open SSH config file and change to port 10022
111 vi /etc/ssh/sshd_config
111 vi /etc/ssh/sshd_config
112
112
113 # What ports, IPs and protocols we listen for
113 # What ports, IPs and protocols we listen for
114 Port 10022
114 Port 10022
115
115
116 Setting IP Table rules for SSH traffic. It is important to note that the
116 Setting IP Table rules for SSH traffic. It is important to note that the
117 default policy of your IpTables can differ and it is worth checking how each
117 default policy of your IpTables can differ and it is worth checking how each
118 is configured. The options are *ACCEPT*, *REJECT*, *DROP*, or *LOG*. The
118 is configured. The options are *ACCEPT*, *REJECT*, *DROP*, or *LOG*. The
119 usual practice is to block access on all ports and then enable access only on
119 usual practice is to block access on all ports and then enable access only on
120 the ports you with to expose.
120 the ports you with to expose.
121
121
122 .. code-block:: bash
122 .. code-block:: bash
123
123
124 # Check iptables policy
124 # Check iptables policy
125 $ sudo iptables -L
125 $ sudo iptables -L
126
126
127 Chain INPUT (policy ACCEPT)
127 Chain INPUT (policy ACCEPT)
128 target prot opt source destination
128 target prot opt source destination
129
129
130 Chain FORWARD (policy ACCEPT)
130 Chain FORWARD (policy ACCEPT)
131 target prot opt source destination
131 target prot opt source destination
132
132
133 Chain OUTPUT (policy ACCEPT)
133 Chain OUTPUT (policy ACCEPT)
134 target prot opt source destination
134 target prot opt source destination
135
135
136 # Close all ports by default
136 # Close all ports by default
137 $ sudo iptables -P INPUT DROP
137 $ sudo iptables -P INPUT DROP
138
138
139 $ sudo iptables -L
139 $ sudo iptables -L
140 Chain INPUT (policy DROP)
140 Chain INPUT (policy DROP)
141 target prot opt source destination
141 target prot opt source destination
142 DROP all -- anywhere anywhere
142 DROP all -- anywhere anywhere
143
143
144 Chain FORWARD (policy ACCEPT)
144 Chain FORWARD (policy ACCEPT)
145 target prot opt source destination
145 target prot opt source destination
146
146
147 Chain OUTPUT (policy ACCEPT)
147 Chain OUTPUT (policy ACCEPT)
148 target prot opt source destination
148 target prot opt source destination
149
149
150 .. code-block:: bash
150 .. code-block:: bash
151
151
152 # Deny outbound SSH traffic
152 # Deny outbound SSH traffic
153 sudo iptables -A OUTPUT -p tcp --dport 10022 -j DROP
153 sudo iptables -A OUTPUT -p tcp --dport 10022 -j DROP
154
154
155 # Allow incoming SSH traffic on port 10022
155 # Allow incoming SSH traffic on port 10022
156 sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT
156 sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT
157
157
158 # Allow incoming HTML traffic on port 80 and 443
158 # Allow incoming HTML traffic on port 80 and 443
159 iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
159 iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
160 iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
160 iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
161
161
162 Saving your IP Table rules, and restoring them from file.
162 Saving your IP Table rules, and restoring them from file.
163
163
164 .. code-block:: bash
164 .. code-block:: bash
165
165
166 # Save you IP Table Rules
166 # Save you IP Table Rules
167 iptables-save
167 iptables-save
168
168
169 # Save your IP Table Rules to a file
169 # Save your IP Table Rules to a file
170 sudo sh -c "iptables-save > /etc/iptables.rules"
170 sudo sh -c "iptables-save > /etc/iptables.rules"
171
171
172 # Restore your IP Table rules from file
172 # Restore your IP Table rules from file
173 iptables-restore < /etc/iptables.rules
173 iptables-restore < /etc/iptables.rules
174
174
175 .. _OpenSSL PKI tutorial: https://pki-tutorial.readthedocs.org/en/latest/#
175 .. _OpenSSL PKI tutorial: https://pki-tutorial.readthedocs.org/en/latest/#
176 .. _Cloudflare PKI post: https://blog.cloudflare.com/how-to-build-your-own-public-key-infrastructure/
176 .. _Cloudflare PKI post: https://blog.cloudflare.com/how-to-build-your-own-public-key-infrastructure/
177 .. _IpTables: https://help.ubuntu.com/community/IptablesHowTo
177 .. _IpTables: https://help.ubuntu.com/community/IptablesHowTo
178 .. _IPFW: https://www.freebsd.org/doc/handbook/firewalls-ipfw.html
178 .. _IPFW: https://www.freebsd.org/doc/handbook/firewalls-ipfw.html
179 .. _IPFILTER: https://www.freebsd.org/doc/handbook/firewalls-ipf.html
179 .. _IPFILTER: https://www.freebsd.org/doc/handbook/firewalls-ipf.html
@@ -1,29 +1,30 b''
1 .. _rhodecode-admin-ref:
1 .. _rhodecode-admin-ref:
2
2
3 System Administration
3 System Administration
4 =====================
4 =====================
5
5
6 The following are the most common system administration tasks.
6 The following are the most common system administration tasks.
7
7
8 .. only:: latex
8 .. only:: latex
9
9
10 * :ref:`vcs-server`
10 * :ref:`vcs-server`
11 * :ref:`apache-ws-ref`
11 * :ref:`apache-ws-ref`
12 * :ref:`nginx-ws-ref`
12 * :ref:`nginx-ws-ref`
13 * :ref:`rhodecode-tuning-ref`
13 * :ref:`rhodecode-tuning-ref`
14 * :ref:`indexing-ref`
14 * :ref:`indexing-ref`
15 * :ref:`rhodecode-reset-ref`
15 * :ref:`rhodecode-reset-ref`
16
16
17 .. toctree::
17 .. toctree::
18
18
19 config-files-overview
19 config-files-overview
20 vcs-server
20 vcs-server
21 svn-http
21 apache-config
22 apache-config
22 nginx-config
23 nginx-config
23 backup-restore
24 backup-restore
24 tuning-rhodecode
25 tuning-rhodecode
25 indexing
26 indexing
26 reset-information
27 reset-information
27 enable-debug
28 enable-debug
28 admin-tricks
29 admin-tricks
29 cleanup-cmds
30 cleanup-cmds
@@ -1,32 +1,32 b''
1 .. _hg-lrg-loc:
1 .. _hg-lrg-loc:
2
2
3 Change the |hg| Large Files Location
3 Change the |hg| Large Files Location
4 ------------------------------------
4 ------------------------------------
5
5
6 |RCE| manages |hg| larges files from the following default location
6 |RCE| manages |hg| larges files from the following default location
7 :file:`/home/{user}/repos/.cache/largefiles`. If you wish to change this, use
7 :file:`/home/{user}/repos/.cache/largefiles`. If you wish to change this, use
8 the following steps:
8 the following steps:
9
9
10 1. Open ishell from the terminal and use it to log into the |RCE| database by
10 1. Open ishell from the terminal and use it to log into the |RCE| database by
11 specifying the instance :file:`rhodecode.ini` file.
11 specifying the instance :file:`rhodecode.ini` file.
12
12
13 .. code-block:: bash
13 .. code-block:: bash
14
14
15 # Open iShell from the terminal and set ini file
15 # Open iShell from the terminal and set ini file
16 $ .rccontrol/enterprise-1/profile/bin/paster ishell .rccontrol/enterprise-1/rhodecode.ini
16 $ .rccontrol/enterprise-1/profile/bin/paster ishell .rccontrol/enterprise-1/rhodecode.ini
17
17
18 2. Run the following commands, and ensure that |RCE| has write access to the
18 2. Run the following commands, and ensure that |RCE| has write access to the
19 new directory:
19 new directory:
20
20
21 .. code-block:: mysql
21 .. code-block:: bash
22
22
23 # Once logged into the database, use SQL to redirect
23 # Once logged into the database, use SQL to redirect
24 # the large files location
24 # the large files location
25 In [1]: from rhodecode.model.settings import SettingsModel
25 In [1]: from rhodecode.model.settings import SettingsModel
26 In [2]: SettingsModel().get_ui_by_key('usercache')
26 In [2]: SettingsModel().get_ui_by_key('usercache')
27 Out[2]: <RhodeCodeUi[largefiles]usercache=>/mnt/hgfs/shared/workspace/xxxx/.cache/largefiles]>
27 Out[2]: <RhodeCodeUi[largefiles]usercache=>/mnt/hgfs/shared/workspace/xxxx/.cache/largefiles]>
28
28
29 In [3]: largefiles_cache = SettingsModel().get_ui_by_key('usercache')
29 In [3]: largefiles_cache = SettingsModel().get_ui_by_key('usercache')
30 In [4]: largefiles_cache.ui_value = '/new/path’
30 In [4]: largefiles_cache.ui_value = '/new/path’
31 In [5]: Session().add(largefiles_cache);Session().commit()
31 In [5]: Session().add(largefiles_cache);Session().commit()
32
32
@@ -1,430 +1,304 b''
1 .. _vcs-server:
1 .. _vcs-server:
2
2
3 VCS Server Management
3 VCS Server Management
4 ---------------------
4 ---------------------
5
5
6 The VCS Server handles |RCM| backend functionality. You need to configure
6 The VCS Server handles |RCM| backend functionality. You need to configure
7 a VCS Server to run with a |RCM| instance. If you do not, you will be missing
7 a VCS Server to run with a |RCM| instance. If you do not, you will be missing
8 the connection between |RCM| and its |repos|. This will cause error messages
8 the connection between |RCM| and its |repos|. This will cause error messages
9 on the web interface. You can run your setup in the following configurations,
9 on the web interface. You can run your setup in the following configurations,
10 currently the best performance is one VCS Server per |RCM| instance:
10 currently the best performance is one VCS Server per |RCM| instance:
11
11
12 * One VCS Server per |RCM| instance.
12 * One VCS Server per |RCM| instance.
13 * One VCS Server handling multiple instances.
13 * One VCS Server handling multiple instances.
14
14
15 .. important::
15 .. important::
16
16
17 If your server locale settings are not correctly configured,
17 If your server locale settings are not correctly configured,
18 |RCE| and the VCS Server can run into issues. See this `Ask Ubuntu`_ post
18 |RCE| and the VCS Server can run into issues. See this `Ask Ubuntu`_ post
19 which explains the problem and gives a solution.
19 which explains the problem and gives a solution.
20
20
21 For more information, see the following sections:
21 For more information, see the following sections:
22
22
23 * :ref:`install-vcs`
23 * :ref:`install-vcs`
24 * :ref:`config-vcs`
24 * :ref:`config-vcs`
25 * :ref:`vcs-server-options`
25 * :ref:`vcs-server-options`
26 * :ref:`vcs-server-versions`
26 * :ref:`vcs-server-versions`
27 * :ref:`vcs-server-maintain`
27 * :ref:`vcs-server-maintain`
28 * :ref:`vcs-server-config-file`
28 * :ref:`vcs-server-config-file`
29 * :ref:`svn-http`
29 * :ref:`svn-http`
30
30
31 .. _install-vcs:
31 .. _install-vcs:
32
32
33 VCS Server Installation
33 VCS Server Installation
34 ^^^^^^^^^^^^^^^^^^^^^^^
34 ^^^^^^^^^^^^^^^^^^^^^^^
35
35
36 To install a VCS Server, see
36 To install a VCS Server, see
37 :ref:`Installing a VCS server <control:install-vcsserver>`.
37 :ref:`Installing a VCS server <control:install-vcsserver>`.
38
38
39 .. _config-vcs:
39 .. _config-vcs:
40
40
41 Hooking |RCE| to its VCS Server
41 Hooking |RCE| to its VCS Server
42 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
42 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
43
43
44 To configure a |RCE| instance to use a VCS server, see
44 To configure a |RCE| instance to use a VCS server, see
45 :ref:`Configuring the VCS Server connection <control:manually-vcsserver-ini>`.
45 :ref:`Configuring the VCS Server connection <control:manually-vcsserver-ini>`.
46
46
47 .. _vcs-server-options:
47 .. _vcs-server-options:
48
48
49 |RCE| VCS Server Options
49 |RCE| VCS Server Options
50 ^^^^^^^^^^^^^^^^^^^^^^^^
50 ^^^^^^^^^^^^^^^^^^^^^^^^
51
51
52 The following list shows the available options on the |RCM| side of the
52 The following list shows the available options on the |RCM| side of the
53 connection to the VCS Server. The settings are configured per
53 connection to the VCS Server. The settings are configured per
54 instance in the
54 instance in the
55 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
55 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
56
56
57 .. rst-class:: dl-horizontal
57 .. rst-class:: dl-horizontal
58
58
59 \vcs.backends <available-vcs-systems>
59 \vcs.backends <available-vcs-systems>
60 Set a comma-separated list of the |repo| options available from the
60 Set a comma-separated list of the |repo| options available from the
61 web interface. The default is ``hg, git, svn``,
61 web interface. The default is ``hg, git, svn``,
62 which is all |repo| types available.
62 which is all |repo| types available.
63
63
64 \vcs.connection_timeout <seconds>
64 \vcs.connection_timeout <seconds>
65 Set the length of time in seconds that the VCS Server waits for
65 Set the length of time in seconds that the VCS Server waits for
66 requests to process. After the timeout expires,
66 requests to process. After the timeout expires,
67 the request is closed. The default is ``3600``. Set to a higher
67 the request is closed. The default is ``3600``. Set to a higher
68 number if you experience network latency, or timeout issues with very
68 number if you experience network latency, or timeout issues with very
69 large push/pull requests.
69 large push/pull requests.
70
70
71 \vcs.server.enable <boolean>
71 \vcs.server.enable <boolean>
72 Enable or disable the VCS Server. The available options are ``true`` or
72 Enable or disable the VCS Server. The available options are ``true`` or
73 ``false``. The default is ``true``.
73 ``false``. The default is ``true``.
74
74
75 \vcs.server <host:port>
75 \vcs.server <host:port>
76 Set the host, either hostname or IP Address, and port of the VCS server
76 Set the host, either hostname or IP Address, and port of the VCS server
77 you wish to run with your |RCM| instance.
77 you wish to run with your |RCM| instance.
78
78
79 .. code-block:: ini
79 .. code-block:: ini
80
80
81 ##################
81 ##################
82 ### VCS CONFIG ###
82 ### VCS CONFIG ###
83 ##################
83 ##################
84 # set this line to match your VCS Server
84 # set this line to match your VCS Server
85 vcs.server = 127.0.0.1:10004
85 vcs.server = 127.0.0.1:10004
86 # Set to False to disable the VCS Server
86 # Set to False to disable the VCS Server
87 vcs.server.enable = True
87 vcs.server.enable = True
88 vcs.backends = hg, git, svn
88 vcs.backends = hg, git, svn
89 vcs.connection_timeout = 3600
89 vcs.connection_timeout = 3600
90
90
91
91
92 .. _vcs-server-versions:
92 .. _vcs-server-versions:
93
93
94 VCS Server Versions
94 VCS Server Versions
95 ^^^^^^^^^^^^^^^^^^^
95 ^^^^^^^^^^^^^^^^^^^
96
96
97 An updated version of the VCS Server is released with each |RCE| version. Use
97 An updated version of the VCS Server is released with each |RCE| version. Use
98 the VCS Server number that matches with the |RCE| version to pair the
98 the VCS Server number that matches with the |RCE| version to pair the
99 appropriate ones together. For |RCE| versions pre 3.3.0,
99 appropriate ones together. For |RCE| versions pre 3.3.0,
100 VCS Server 1.X.Y works with |RCE| 3.X.Y, for example:
100 VCS Server 1.X.Y works with |RCE| 3.X.Y, for example:
101
101
102 * VCS Server 1.0.0 works with |RCE| 3.0.0
102 * VCS Server 1.0.0 works with |RCE| 3.0.0
103 * VCS Server 1.2.2 works with |RCE| 3.2.2
103 * VCS Server 1.2.2 works with |RCE| 3.2.2
104
104
105 For |RCE| versions post 3.3.0, the VCS Server and |RCE| version numbers
105 For |RCE| versions post 3.3.0, the VCS Server and |RCE| version numbers
106 match, for example:
106 match, for example:
107
107
108 * VCS Server |release| works with |RCE| |release|
108 * VCS Server |release| works with |RCE| |release|
109
109
110 .. _vcs-server-maintain:
110 .. _vcs-server-maintain:
111
111
112 VCS Server Memory Optimization
112 VCS Server Memory Optimization
113 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
113 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
114
114
115 To configure the VCS server to manage the cache efficiently, you need to
115 To configure the VCS server to manage the cache efficiently, you need to
116 configure the following options in the
116 configure the following options in the
117 :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini` file. Once
117 :file:`/home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini` file. Once
118 configured, restart the VCS Server.
118 configured, restart the VCS Server.
119
119
120 .. rst-class:: dl-horizontal
120 .. rst-class:: dl-horizontal
121
121
122 \beaker.cache.repo_object.type = memorylru
122 \beaker.cache.repo_object.type = memorylru
123 Configures the cache to discard the least recently used items.
123 Configures the cache to discard the least recently used items.
124 This setting takes the following valid options:
124 This setting takes the following valid options:
125
125
126 * ``memorylru``: The default setting, which removes the least recently
126 * ``memorylru``: The default setting, which removes the least recently
127 used items from the cache.
127 used items from the cache.
128 * ``memory``: Runs the VCS Server without clearing the cache.
128 * ``memory``: Runs the VCS Server without clearing the cache.
129 * ``nocache``: Runs the VCS Server without a cache. This will
129 * ``nocache``: Runs the VCS Server without a cache. This will
130 dramatically reduce the VCS Server performance.
130 dramatically reduce the VCS Server performance.
131
131
132 \beaker.cache.repo_object.max_items = 100
132 \beaker.cache.repo_object.max_items = 100
133 Sets the maximum number of items stored in the cache, before the cache
133 Sets the maximum number of items stored in the cache, before the cache
134 starts to be cleared.
134 starts to be cleared.
135
135
136 As a general rule of thumb, running this value at 120 resulted in a
136 As a general rule of thumb, running this value at 120 resulted in a
137 5GB cache. Running it at 240 resulted in a 9GB cache. Your results
137 5GB cache. Running it at 240 resulted in a 9GB cache. Your results
138 will differ based on usage patterns and |repo| sizes.
138 will differ based on usage patterns and |repo| sizes.
139
139
140 Tweaking this value to run at a fairly constant memory load on your
140 Tweaking this value to run at a fairly constant memory load on your
141 server will help performance.
141 server will help performance.
142
142
143 To clear the cache completely, you can restart the VCS Server.
143 To clear the cache completely, you can restart the VCS Server.
144
144
145 .. important::
145 .. important::
146
146
147 While the VCS Server handles a restart gracefully on the web interface,
147 While the VCS Server handles a restart gracefully on the web interface,
148 it will drop connections during push/pull requests. So it is recommended
148 it will drop connections during push/pull requests. So it is recommended
149 you only perform this when there is very little traffic on the instance.
149 you only perform this when there is very little traffic on the instance.
150
150
151 Use the following example to restart your VCS Server,
151 Use the following example to restart your VCS Server,
152 for full details see the :ref:`RhodeCode Control CLI <control:rcc-cli>`.
152 for full details see the :ref:`RhodeCode Control CLI <control:rcc-cli>`.
153
153
154 .. code-block:: bash
154 .. code-block:: bash
155
155
156 $ rccontrol status
156 $ rccontrol status
157
157
158 .. code-block:: vim
158 .. code-block:: vim
159
159
160 - NAME: vcsserver-1
160 - NAME: vcsserver-1
161 - STATUS: RUNNING
161 - STATUS: RUNNING
162 - TYPE: VCSServer
162 - TYPE: VCSServer
163 - VERSION: 1.0.0
163 - VERSION: 1.0.0
164 - URL: http://127.0.0.1:10001
164 - URL: http://127.0.0.1:10001
165
165
166 $ rccontrol restart vcsserver-1
166 $ rccontrol restart vcsserver-1
167 Instance "vcsserver-1" successfully stopped.
167 Instance "vcsserver-1" successfully stopped.
168 Instance "vcsserver-1" successfully started.
168 Instance "vcsserver-1" successfully started.
169
169
170 .. _vcs-server-config-file:
170 .. _vcs-server-config-file:
171
171
172 VCS Server Configuration
172 VCS Server Configuration
173 ^^^^^^^^^^^^^^^^^^^^^^^^
173 ^^^^^^^^^^^^^^^^^^^^^^^^
174
174
175 You can configure settings for multiple VCS Servers on your
175 You can configure settings for multiple VCS Servers on your
176 system using their individual configuration files. Use the following
176 system using their individual configuration files. Use the following
177 properties inside the configuration file to set up your system. The default
177 properties inside the configuration file to set up your system. The default
178 location is :file:`home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`.
178 location is :file:`home/{user}/.rccontrol/{vcsserver-id}/vcsserver.ini`.
179 For a more detailed explanation of the logger levers, see :ref:`debug-mode`.
179 For a more detailed explanation of the logger levers, see :ref:`debug-mode`.
180
180
181 .. rst-class:: dl-horizontal
181 .. rst-class:: dl-horizontal
182
182
183 \host <ip-address>
183 \host <ip-address>
184 Set the host on which the VCS Server will run.
184 Set the host on which the VCS Server will run.
185
185
186 \port <int>
186 \port <int>
187 Set the port number on which the VCS Server will be available.
187 Set the port number on which the VCS Server will be available.
188
188
189 \locale <locale_utf>
189 \locale <locale_utf>
190 Set the locale the VCS Server expects.
190 Set the locale the VCS Server expects.
191
191
192 \threadpool_size <int>
192 \threadpool_size <int>
193 Set the size of the threadpool used to communicate
193 Set the size of the threadpool used to communicate
194 with the WSGI workers. This should be at least 6 times the number of
194 with the WSGI workers. This should be at least 6 times the number of
195 WSGI worker processes.
195 WSGI worker processes.
196
196
197 \timeout <seconds>
197 \timeout <seconds>
198 Set the timeout for RPC communication in seconds.
198 Set the timeout for RPC communication in seconds.
199
199
200 .. note::
200 .. note::
201
201
202 After making changes, you need to restart your VCS Server to pick them up.
202 After making changes, you need to restart your VCS Server to pick them up.
203
203
204 .. code-block:: ini
204 .. code-block:: ini
205
205
206 ################################################################################
206 ################################################################################
207 # RhodeCode VCSServer - configuration #
207 # RhodeCode VCSServer - configuration #
208 # #
208 # #
209 ################################################################################
209 ################################################################################
210
210
211 [DEFAULT]
211 [DEFAULT]
212 host = 127.0.0.1
212 host = 127.0.0.1
213 port = 9900
213 port = 9900
214 locale = en_US.UTF-8
214 locale = en_US.UTF-8
215 # number of worker threads, this should be set based on a formula threadpool=N*6
215 # number of worker threads, this should be set based on a formula threadpool=N*6
216 # where N is number of RhodeCode Enterprise workers, eg. running 2 instances
216 # where N is number of RhodeCode Enterprise workers, eg. running 2 instances
217 # 8 gunicorn workers each would be 2 * 8 * 6 = 96, threadpool_size = 96
217 # 8 gunicorn workers each would be 2 * 8 * 6 = 96, threadpool_size = 96
218 threadpool_size = 16
218 threadpool_size = 16
219 timeout = 0
219 timeout = 0
220
220
221 # cache regions, please don't change
221 # cache regions, please don't change
222 beaker.cache.regions = repo_object
222 beaker.cache.regions = repo_object
223 beaker.cache.repo_object.type = memorylru
223 beaker.cache.repo_object.type = memorylru
224 beaker.cache.repo_object.max_items = 1000
224 beaker.cache.repo_object.max_items = 1000
225
225
226 # cache auto-expires after N seconds
226 # cache auto-expires after N seconds
227 beaker.cache.repo_object.expire = 10
227 beaker.cache.repo_object.expire = 10
228 beaker.cache.repo_object.enabled = true
228 beaker.cache.repo_object.enabled = true
229
229
230
230
231 ################################
231 ################################
232 ### LOGGING CONFIGURATION ####
232 ### LOGGING CONFIGURATION ####
233 ################################
233 ################################
234 [loggers]
234 [loggers]
235 keys = root, vcsserver, pyro4, beaker
235 keys = root, vcsserver, pyro4, beaker
236
236
237 [handlers]
237 [handlers]
238 keys = console
238 keys = console
239
239
240 [formatters]
240 [formatters]
241 keys = generic
241 keys = generic
242
242
243 #############
243 #############
244 ## LOGGERS ##
244 ## LOGGERS ##
245 #############
245 #############
246 [logger_root]
246 [logger_root]
247 level = NOTSET
247 level = NOTSET
248 handlers = console
248 handlers = console
249
249
250 [logger_vcsserver]
250 [logger_vcsserver]
251 level = DEBUG
251 level = DEBUG
252 handlers =
252 handlers =
253 qualname = vcsserver
253 qualname = vcsserver
254 propagate = 1
254 propagate = 1
255
255
256 [logger_beaker]
256 [logger_beaker]
257 level = DEBUG
257 level = DEBUG
258 handlers =
258 handlers =
259 qualname = beaker
259 qualname = beaker
260 propagate = 1
260 propagate = 1
261
261
262 [logger_pyro4]
262 [logger_pyro4]
263 level = DEBUG
263 level = DEBUG
264 handlers =
264 handlers =
265 qualname = Pyro4
265 qualname = Pyro4
266 propagate = 1
266 propagate = 1
267
267
268
268
269 ##############
269 ##############
270 ## HANDLERS ##
270 ## HANDLERS ##
271 ##############
271 ##############
272
272
273 [handler_console]
273 [handler_console]
274 class = StreamHandler
274 class = StreamHandler
275 args = (sys.stderr,)
275 args = (sys.stderr,)
276 level = DEBUG
276 level = DEBUG
277 formatter = generic
277 formatter = generic
278
278
279 [handler_file]
279 [handler_file]
280 class = FileHandler
280 class = FileHandler
281 args = ('vcsserver.log', 'a',)
281 args = ('vcsserver.log', 'a',)
282 level = DEBUG
282 level = DEBUG
283 formatter = generic
283 formatter = generic
284
284
285 [handler_file_rotating]
285 [handler_file_rotating]
286 class = logging.handlers.TimedRotatingFileHandler
286 class = logging.handlers.TimedRotatingFileHandler
287 # 'D', 5 - rotate every 5days
287 # 'D', 5 - rotate every 5days
288 # you can set 'h', 'midnight'
288 # you can set 'h', 'midnight'
289 args = ('vcsserver.log', 'D', 5, 10,)
289 args = ('vcsserver.log', 'D', 5, 10,)
290 level = DEBUG
290 level = DEBUG
291 formatter = generic
291 formatter = generic
292
292
293 ################
293 ################
294 ## FORMATTERS ##
294 ## FORMATTERS ##
295 ################
295 ################
296
296
297 [formatter_generic]
297 [formatter_generic]
298 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
298 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
299 datefmt = %Y-%m-%d %H:%M:%S
299 datefmt = %Y-%m-%d %H:%M:%S
300
300
301 .. _svn-http:
302
303 |svn| With Write Over HTTP
304 ^^^^^^^^^^^^^^^^^^^^^^^^^^
305
306 To use |svn| with read/write support over the |svn| HTTP protocol, you have to
307 configure the HTTP |svn| backend.
308
309 Prerequisites
310 =============
311
312 - Enable HTTP support inside the admin VCS settings on your |RCE| instance
313 - You need to install the following tools on the machine that is running an
314 instance of |RCE|:
315 ``Apache HTTP Server`` and
316 ``mod_dav_svn``.
317
318
319 Using Ubuntu Distribution as an example you can run:
320
321 .. code-block:: bash
322
323 $ sudo apt-get install apache2 libapache2-mod-svn
324
325 Once installed you need to enable ``dav_svn``:
326
327 .. code-block:: bash
328
329 $ sudo a2enmod dav_svn
330
331 Configuring Apache Setup
332 ========================
333
334 .. tip::
335
336 It is recommended to run Apache on a port other than 80, due to possible
337 conflicts with other HTTP servers like nginx. To do this, set the
338 ``Listen`` parameter in the ``/etc/apache2/ports.conf`` file, for example
339 ``Listen 8090``.
340
341
342 .. warning::
343
344 Make sure your Apache instance which runs the mod_dav_svn module is
345 only accessible by RhodeCode. Otherwise everyone is able to browse
346 the repositories or run subversion operations (checkout/commit/etc.).
347
348 It is also recommended to run apache as the same user as |RCE|, otherwise
349 permission issues could occur. To do this edit the ``/etc/apache2/envvars``
350
351 .. code-block:: apache
352
353 export APACHE_RUN_USER=rhodecode
354 export APACHE_RUN_GROUP=rhodecode
355
356 1. To configure Apache, create and edit a virtual hosts file, for example
357 :file:`/etc/apache2/sites-available/default.conf`. Below is an example
358 how to use one with auto-generated config ```mod_dav_svn.conf```
359 from configured |RCE| instance.
360
361 .. code-block:: apache
362
363 <VirtualHost *:8080>
364 ServerAdmin rhodecode-admin@localhost
365 DocumentRoot /var/www/html
366 ErrorLog ${'${APACHE_LOG_DIR}'}/error.log
367 CustomLog ${'${APACHE_LOG_DIR}'}/access.log combined
368 Include /home/user/.rccontrol/enterprise-1/mod_dav_svn.conf
369 </VirtualHost>
370
371
372 2. Go to the :menuselection:`Admin --> Settings --> VCS` page, and
373 enable :guilabel:`Proxy Subversion HTTP requests`, and specify the
374 :guilabel:`Subversion HTTP Server URL`.
375
376 3. Open the |RCE| configuration file,
377 :file:`/home/{user}/.rccontrol/{instance-id}/rhodecode.ini`
378
379 4. Add the following configuration option in the ``[app:main]``
380 section if you don't have it yet.
381
382 This enables mapping of the created |RCE| repo groups into special |svn| paths.
383 Each time a new repository group is created, the system will update
384 the template file and create new mapping. Apache web server needs to be
385 reloaded to pick up the changes on this file.
386 It's recommended to add reload into a crontab so the changes can be picked
387 automatically once someone creates a repository group inside RhodeCode.
388
389
390 .. code-block:: ini
391
392 ##############################################
393 ### Subversion proxy support (mod_dav_svn) ###
394 ##############################################
395 ## Enable or disable the config file generation.
396 svn.proxy.generate_config = true
397 ## Generate config file with `SVNListParentPath` set to `On`.
398 svn.proxy.list_parent_path = true
399 ## Set location and file name of generated config file.
400 svn.proxy.config_file_path = %(here)s/mod_dav_svn.conf
401 ## File system path to the directory containing the repositories served by
402 ## RhodeCode.
403 svn.proxy.parent_path_root = /path/to/repo_store
404 ## Used as a prefix to the <Location> block in the generated config file. In
405 ## most cases it should be set to `/`.
406 svn.proxy.location_root = /
407
408
409 This would create a special template file called ```mod_dav_svn.conf```. We
410 used that file path in the apache config above inside the Include statement.
411
412
413 Using |svn|
414 ===========
415
416 Once |svn| has been enabled on your instance, you can use it with the
417 following examples. For more |svn| information, see the `Subversion Red Book`_
418
419 .. code-block:: bash
420
421 # To clone a repository
422 svn checkout http://my-svn-server.example.com/my-svn-repo
423
424 # svn commit
425 svn commit
426
301
427 .. _Subversion Red Book: http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.ref.svn
302 .. _Subversion Red Book: http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.ref.svn
428
303
429
304 .. _Ask Ubuntu: http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue
430 .. _Ask Ubuntu: http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue No newline at end of file
@@ -1,77 +1,77 b''
1 .. _deprecated-methods-ref:
1 .. _deprecated-methods-ref:
2
2
3 deprecated methods
3 deprecated methods
4 =================
4 ==================
5
5
6 changeset_comment
6 changeset_comment
7 -----------------
7 -----------------
8
8
9 .. py:function:: changeset_comment(apiuser, repoid, revision, message, userid=<Optional:<OptionalAttr:apiuser>>, status=<Optional:None>)
9 .. py:function:: changeset_comment(apiuser, repoid, revision, message, userid=<Optional:<OptionalAttr:apiuser>>, status=<Optional:None>)
10
10
11 .. deprecated:: 3.4.0
11 .. deprecated:: 3.4.0
12
12
13 Please use method `comment_commit` instead.
13 Please use method `comment_commit` instead.
14
14
15
15
16 Set a changeset comment, and optionally change the status of the
16 Set a changeset comment, and optionally change the status of the
17 changeset.
17 changeset.
18
18
19 This command can only be run using an |authtoken| with admin
19 This command can only be run using an |authtoken| with admin
20 permissions on the |repo|.
20 permissions on the |repo|.
21
21
22 :param apiuser: This is filled automatically from the |authtoken|.
22 :param apiuser: This is filled automatically from the |authtoken|.
23 :type apiuser: AuthUser
23 :type apiuser: AuthUser
24 :param repoid: Set the repository name or repository ID.
24 :param repoid: Set the repository name or repository ID.
25 :type repoid: str or int
25 :type repoid: str or int
26 :param revision: Specify the revision for which to set a comment.
26 :param revision: Specify the revision for which to set a comment.
27 :type revision: str
27 :type revision: str
28 :param message: The comment text.
28 :param message: The comment text.
29 :type message: str
29 :type message: str
30 :param userid: Set the user name of the comment creator.
30 :param userid: Set the user name of the comment creator.
31 :type userid: Optional(str or int)
31 :type userid: Optional(str or int)
32 :param status: Set the comment status. The following are valid options:
32 :param status: Set the comment status. The following are valid options:
33 * not_reviewed
33 * not_reviewed
34 * approved
34 * approved
35 * rejected
35 * rejected
36 * under_review
36 * under_review
37 :type status: str
37 :type status: str
38
38
39 Example error output:
39 Example error output:
40
40
41 .. code-block:: json
41 .. code-block:: json
42
42
43 {
43 {
44 "id" : <id_given_in_input>,
44 "id" : <id_given_in_input>,
45 "result" : {
45 "result" : {
46 "msg": "Commented on commit `<revision>` for repository `<repoid>`",
46 "msg": "Commented on commit `<revision>` for repository `<repoid>`",
47 "status_change": null or <status>,
47 "status_change": null or <status>,
48 "success": true
48 "success": true
49 },
49 },
50 "error" : null
50 "error" : null
51 }
51 }
52
52
53
53
54 get_locks
54 get_locks
55 ---------
55 ---------
56
56
57 .. py:function:: get_locks(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
57 .. py:function:: get_locks(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
58
58
59 .. deprecated:: 4.0.0
59 .. deprecated:: 4.0.0
60
60
61 Please use method `get_user_locks` instead.
61 Please use method `get_user_locks` instead.
62
62
63 None
63 None
64
64
65
65
66 show_ip
66 show_ip
67 -------
67 -------
68
68
69 .. py:function:: show_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
69 .. py:function:: show_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
70
70
71 .. deprecated:: 4.0.0
71 .. deprecated:: 4.0.0
72
72
73 Please use method `get_ip` instead.
73 Please use method `get_ip` instead.
74
74
75 None
75 None
76
76
77
77
@@ -1,121 +1,121 b''
1 .. _gist-methods-ref:
1 .. _gist-methods-ref:
2
2
3 gist methods
3 gist methods
4 =================
4 ============
5
5
6 create_gist
6 create_gist
7 -----------
7 -----------
8
8
9 .. py:function:: create_gist(apiuser, files, gistid=<Optional:None>, owner=<Optional:<OptionalAttr:apiuser>>, gist_type=<Optional:u'public'>, lifetime=<Optional:-1>, acl_level=<Optional:u'acl_public'>, description=<Optional:''>)
9 .. py:function:: create_gist(apiuser, files, gistid=<Optional:None>, owner=<Optional:<OptionalAttr:apiuser>>, gist_type=<Optional:u'public'>, lifetime=<Optional:-1>, acl_level=<Optional:u'acl_public'>, description=<Optional:''>)
10
10
11 Creates a new Gist.
11 Creates a new Gist.
12
12
13 :param apiuser: This is filled automatically from the |authtoken|.
13 :param apiuser: This is filled automatically from the |authtoken|.
14 :type apiuser: AuthUser
14 :type apiuser: AuthUser
15 :param files: files to be added to the gist. The data structure has
15 :param files: files to be added to the gist. The data structure has
16 to match the following example::
16 to match the following example::
17
17
18 {'filename1': {'content':'...'}, 'filename2': {'content':'...'}}
18 {'filename1': {'content':'...'}, 'filename2': {'content':'...'}}
19
19
20 :type files: dict
20 :type files: dict
21 :param gistid: Set a custom id for the gist
21 :param gistid: Set a custom id for the gist
22 :type gistid: Optional(str)
22 :type gistid: Optional(str)
23 :param owner: Set the gist owner, defaults to api method caller
23 :param owner: Set the gist owner, defaults to api method caller
24 :type owner: Optional(str or int)
24 :type owner: Optional(str or int)
25 :param gist_type: type of gist ``public`` or ``private``
25 :param gist_type: type of gist ``public`` or ``private``
26 :type gist_type: Optional(str)
26 :type gist_type: Optional(str)
27 :param lifetime: time in minutes of gist lifetime
27 :param lifetime: time in minutes of gist lifetime
28 :type lifetime: Optional(int)
28 :type lifetime: Optional(int)
29 :param acl_level: acl level for this gist, can be
29 :param acl_level: acl level for this gist, can be
30 ``acl_public`` or ``acl_private`` If the value is set to
30 ``acl_public`` or ``acl_private`` If the value is set to
31 ``acl_private`` only logged in users are able to access this gist.
31 ``acl_private`` only logged in users are able to access this gist.
32 If not set it defaults to ``acl_public``.
32 If not set it defaults to ``acl_public``.
33 :type acl_level: Optional(str)
33 :type acl_level: Optional(str)
34 :param description: gist description
34 :param description: gist description
35 :type description: Optional(str)
35 :type description: Optional(str)
36
36
37 Example output:
37 Example output:
38
38
39 .. code-block:: bash
39 .. code-block:: bash
40
40
41 id : <id_given_in_input>
41 id : <id_given_in_input>
42 result : {
42 result : {
43 "msg": "created new gist",
43 "msg": "created new gist",
44 "gist": {}
44 "gist": {}
45 }
45 }
46 error : null
46 error : null
47
47
48 Example error output:
48 Example error output:
49
49
50 .. code-block:: bash
50 .. code-block:: bash
51
51
52 id : <id_given_in_input>
52 id : <id_given_in_input>
53 result : null
53 result : null
54 error : {
54 error : {
55 "failed to create gist"
55 "failed to create gist"
56 }
56 }
57
57
58
58
59 delete_gist
59 delete_gist
60 -----------
60 -----------
61
61
62 .. py:function:: delete_gist(apiuser, gistid)
62 .. py:function:: delete_gist(apiuser, gistid)
63
63
64 Deletes existing gist
64 Deletes existing gist
65
65
66 :param apiuser: filled automatically from apikey
66 :param apiuser: filled automatically from apikey
67 :type apiuser: AuthUser
67 :type apiuser: AuthUser
68 :param gistid: id of gist to delete
68 :param gistid: id of gist to delete
69 :type gistid: str
69 :type gistid: str
70
70
71 Example output:
71 Example output:
72
72
73 .. code-block:: bash
73 .. code-block:: bash
74
74
75 id : <id_given_in_input>
75 id : <id_given_in_input>
76 result : {
76 result : {
77 "deleted gist ID: <gist_id>",
77 "deleted gist ID: <gist_id>",
78 "gist": null
78 "gist": null
79 }
79 }
80 error : null
80 error : null
81
81
82 Example error output:
82 Example error output:
83
83
84 .. code-block:: bash
84 .. code-block:: bash
85
85
86 id : <id_given_in_input>
86 id : <id_given_in_input>
87 result : null
87 result : null
88 error : {
88 error : {
89 "failed to delete gist ID:<gist_id>"
89 "failed to delete gist ID:<gist_id>"
90 }
90 }
91
91
92
92
93 get_gist
93 get_gist
94 --------
94 --------
95
95
96 .. py:function:: get_gist(apiuser, gistid, content=<Optional:False>)
96 .. py:function:: get_gist(apiuser, gistid, content=<Optional:False>)
97
97
98 Get the specified gist, based on the gist ID.
98 Get the specified gist, based on the gist ID.
99
99
100 :param apiuser: This is filled automatically from the |authtoken|.
100 :param apiuser: This is filled automatically from the |authtoken|.
101 :type apiuser: AuthUser
101 :type apiuser: AuthUser
102 :param gistid: Set the id of the private or public gist
102 :param gistid: Set the id of the private or public gist
103 :type gistid: str
103 :type gistid: str
104 :param content: Return the gist content. Default is false.
104 :param content: Return the gist content. Default is false.
105 :type content: Optional(bool)
105 :type content: Optional(bool)
106
106
107
107
108 get_gists
108 get_gists
109 ---------
109 ---------
110
110
111 .. py:function:: get_gists(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
111 .. py:function:: get_gists(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
112
112
113 Get all gists for given user. If userid is empty returned gists
113 Get all gists for given user. If userid is empty returned gists
114 are for user who called the api
114 are for user who called the api
115
115
116 :param apiuser: This is filled automatically from the |authtoken|.
116 :param apiuser: This is filled automatically from the |authtoken|.
117 :type apiuser: AuthUser
117 :type apiuser: AuthUser
118 :param userid: user to get gists for
118 :param userid: user to get gists for
119 :type userid: Optional(str or int)
119 :type userid: Optional(str or int)
120
120
121
121
@@ -1,71 +1,71 b''
1 .. _license-methods-ref:
1 .. _license-methods-ref:
2
2
3 license methods
3 license methods
4 =================
4 ===============
5
5
6 get_license_info (EE only)
6 get_license_info (EE only)
7 ----------------
7 --------------------------
8
8
9 .. py:function:: get_license_info(apiuser)
9 .. py:function:: get_license_info(apiuser)
10
10
11 Returns the |RCE| license information.
11 Returns the |RCE| license information.
12
12
13 :param apiuser: This is filled automatically from the |authtoken|.
13 :param apiuser: This is filled automatically from the |authtoken|.
14 :type apiuser: AuthUser
14 :type apiuser: AuthUser
15
15
16 Example output:
16 Example output:
17
17
18 .. code-block:: bash
18 .. code-block:: bash
19
19
20 id : <id_given_in_input>
20 id : <id_given_in_input>
21 result : {
21 result : {
22 'rhodecode_version': <rhodecode version>,
22 'rhodecode_version': <rhodecode version>,
23 'token': <license token>,
23 'token': <license token>,
24 'issued_to': <license owner>,
24 'issued_to': <license owner>,
25 'issued_on': <license issue date>,
25 'issued_on': <license issue date>,
26 'expires_on': <license expiration date>,
26 'expires_on': <license expiration date>,
27 'type': <license type>,
27 'type': <license type>,
28 'users_limit': <license users limit>,
28 'users_limit': <license users limit>,
29 'key': <license key>
29 'key': <license key>
30 }
30 }
31 error : null
31 error : null
32
32
33
33
34 set_license_key (EE only)
34 set_license_key (EE only)
35 ---------------
35 -------------------------
36
36
37 .. py:function:: set_license_key(apiuser, key)
37 .. py:function:: set_license_key(apiuser, key)
38
38
39 Sets the |RCE| license key.
39 Sets the |RCE| license key.
40
40
41 :param apiuser: This is filled automatically from the |authtoken|.
41 :param apiuser: This is filled automatically from the |authtoken|.
42 :type apiuser: AuthUser
42 :type apiuser: AuthUser
43 :param key: This is the license key to be set.
43 :param key: This is the license key to be set.
44 :type key: str
44 :type key: str
45
45
46 Example output:
46 Example output:
47
47
48 .. code-block:: bash
48 .. code-block:: bash
49
49
50 id : <id_given_in_input>
50 id : <id_given_in_input>
51 result: {
51 result: {
52 "msg" : "updated license information",
52 "msg" : "updated license information",
53 "key": <key>
53 "key": <key>
54 }
54 }
55 error: null
55 error: null
56
56
57 Example error output:
57 Example error output:
58
58
59 .. code-block:: bash
59 .. code-block:: bash
60
60
61 id : <id_given_in_input>
61 id : <id_given_in_input>
62 result : null
62 result : null
63 error : {
63 error : {
64 "license key is not valid"
64 "license key is not valid"
65 or
65 or
66 "trial licenses cannot be uploaded"
66 "trial licenses cannot be uploaded"
67 or
67 or
68 "error occurred while updating license"
68 "error occurred while updating license"
69 }
69 }
70
70
71
71
@@ -1,344 +1,371 b''
1 .. _pull-request-methods-ref:
1 .. _pull-request-methods-ref:
2
2
3 pull_request methods
3 pull_request methods
4 =================
4 ====================
5
5
6 close_pull_request
6 close_pull_request
7 ------------------
7 ------------------
8
8
9 .. py:function:: close_pull_request(apiuser, repoid, pullrequestid, userid=<Optional:<OptionalAttr:apiuser>>)
9 .. py:function:: close_pull_request(apiuser, repoid, pullrequestid, userid=<Optional:<OptionalAttr:apiuser>>)
10
10
11 Close the pull request specified by `pullrequestid`.
11 Close the pull request specified by `pullrequestid`.
12
12
13 :param apiuser: This is filled automatically from the |authtoken|.
13 :param apiuser: This is filled automatically from the |authtoken|.
14 :type apiuser: AuthUser
14 :type apiuser: AuthUser
15 :param repoid: Repository name or repository ID to which the pull
15 :param repoid: Repository name or repository ID to which the pull
16 request belongs.
16 request belongs.
17 :type repoid: str or int
17 :type repoid: str or int
18 :param pullrequestid: ID of the pull request to be closed.
18 :param pullrequestid: ID of the pull request to be closed.
19 :type pullrequestid: int
19 :type pullrequestid: int
20 :param userid: Close the pull request as this user.
20 :param userid: Close the pull request as this user.
21 :type userid: Optional(str or int)
21 :type userid: Optional(str or int)
22
22
23 Example output:
23 Example output:
24
24
25 .. code-block:: bash
25 .. code-block:: bash
26
26
27 "id": <id_given_in_input>,
27 "id": <id_given_in_input>,
28 "result":
28 "result":
29 {
29 {
30 "pull_request_id": "<int>",
30 "pull_request_id": "<int>",
31 "closed": "<bool>"
31 "closed": "<bool>"
32 },
32 },
33 "error": null
33 "error": null
34
34
35
35
36 comment_pull_request
36 comment_pull_request
37 --------------------
37 --------------------
38
38
39 .. py:function:: comment_pull_request(apiuser, repoid, pullrequestid, message=<Optional:None>, status=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
39 .. py:function:: comment_pull_request(apiuser, repoid, pullrequestid, message=<Optional:None>, status=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
40
40
41 Comment on the pull request specified with the `pullrequestid`,
41 Comment on the pull request specified with the `pullrequestid`,
42 in the |repo| specified by the `repoid`, and optionally change the
42 in the |repo| specified by the `repoid`, and optionally change the
43 review status.
43 review status.
44
44
45 :param apiuser: This is filled automatically from the |authtoken|.
45 :param apiuser: This is filled automatically from the |authtoken|.
46 :type apiuser: AuthUser
46 :type apiuser: AuthUser
47 :param repoid: The repository name or repository ID.
47 :param repoid: The repository name or repository ID.
48 :type repoid: str or int
48 :type repoid: str or int
49 :param pullrequestid: The pull request ID.
49 :param pullrequestid: The pull request ID.
50 :type pullrequestid: int
50 :type pullrequestid: int
51 :param message: The text content of the comment.
51 :param message: The text content of the comment.
52 :type message: str
52 :type message: str
53 :param status: (**Optional**) Set the approval status of the pull
53 :param status: (**Optional**) Set the approval status of the pull
54 request. Valid options are:
54 request. Valid options are:
55 * not_reviewed
55 * not_reviewed
56 * approved
56 * approved
57 * rejected
57 * rejected
58 * under_review
58 * under_review
59 :type status: str
59 :type status: str
60 :param userid: Comment on the pull request as this user
60 :param userid: Comment on the pull request as this user
61 :type userid: Optional(str or int)
61 :type userid: Optional(str or int)
62
62
63 Example output:
63 Example output:
64
64
65 .. code-block:: bash
65 .. code-block:: bash
66
66
67 id : <id_given_in_input>
67 id : <id_given_in_input>
68 result :
68 result :
69 {
69 {
70 "pull_request_id": "<Integer>",
70 "pull_request_id": "<Integer>",
71 "comment_id": "<Integer>"
71 "comment_id": "<Integer>"
72 }
72 }
73 error : null
73 error : null
74
74
75
75
76 create_pull_request
76 create_pull_request
77 -------------------
77 -------------------
78
78
79 .. py:function:: create_pull_request(apiuser, source_repo, target_repo, source_ref, target_ref, title, description=<Optional:''>, reviewers=<Optional:None>)
79 .. py:function:: create_pull_request(apiuser, source_repo, target_repo, source_ref, target_ref, title, description=<Optional:''>, reviewers=<Optional:None>)
80
80
81 Creates a new pull request.
81 Creates a new pull request.
82
82
83 Accepts refs in the following formats:
83 Accepts refs in the following formats:
84
84
85 * branch:<branch_name>:<sha>
85 * branch:<branch_name>:<sha>
86 * branch:<branch_name>
86 * branch:<branch_name>
87 * bookmark:<bookmark_name>:<sha> (Mercurial only)
87 * bookmark:<bookmark_name>:<sha> (Mercurial only)
88 * bookmark:<bookmark_name> (Mercurial only)
88 * bookmark:<bookmark_name> (Mercurial only)
89
89
90 :param apiuser: This is filled automatically from the |authtoken|.
90 :param apiuser: This is filled automatically from the |authtoken|.
91 :type apiuser: AuthUser
91 :type apiuser: AuthUser
92 :param source_repo: Set the source repository name.
92 :param source_repo: Set the source repository name.
93 :type source_repo: str
93 :type source_repo: str
94 :param target_repo: Set the target repository name.
94 :param target_repo: Set the target repository name.
95 :type target_repo: str
95 :type target_repo: str
96 :param source_ref: Set the source ref name.
96 :param source_ref: Set the source ref name.
97 :type source_ref: str
97 :type source_ref: str
98 :param target_ref: Set the target ref name.
98 :param target_ref: Set the target ref name.
99 :type target_ref: str
99 :type target_ref: str
100 :param title: Set the pull request title.
100 :param title: Set the pull request title.
101 :type title: str
101 :type title: str
102 :param description: Set the pull request description.
102 :param description: Set the pull request description.
103 :type description: Optional(str)
103 :type description: Optional(str)
104 :param reviewers: Set the new pull request reviewers list.
104 :param reviewers: Set the new pull request reviewers list.
105 :type reviewers: Optional(list)
105 :type reviewers: Optional(list)
106 Accepts username strings or objects of the format:
107 {
108 'username': 'nick', 'reasons': ['original author']
109 }
106
110
107
111
108 get_pull_request
112 get_pull_request
109 ----------------
113 ----------------
110
114
111 .. py:function:: get_pull_request(apiuser, repoid, pullrequestid)
115 .. py:function:: get_pull_request(apiuser, repoid, pullrequestid)
112
116
113 Get a pull request based on the given ID.
117 Get a pull request based on the given ID.
114
118
115 :param apiuser: This is filled automatically from the |authtoken|.
119 :param apiuser: This is filled automatically from the |authtoken|.
116 :type apiuser: AuthUser
120 :type apiuser: AuthUser
117 :param repoid: Repository name or repository ID from where the pull
121 :param repoid: Repository name or repository ID from where the pull
118 request was opened.
122 request was opened.
119 :type repoid: str or int
123 :type repoid: str or int
120 :param pullrequestid: ID of the requested pull request.
124 :param pullrequestid: ID of the requested pull request.
121 :type pullrequestid: int
125 :type pullrequestid: int
122
126
123 Example output:
127 Example output:
124
128
125 .. code-block:: bash
129 .. code-block:: bash
126
130
127 "id": <id_given_in_input>,
131 "id": <id_given_in_input>,
128 "result":
132 "result":
129 {
133 {
130 "pull_request_id": "<pull_request_id>",
134 "pull_request_id": "<pull_request_id>",
131 "url": "<url>",
135 "url": "<url>",
132 "title": "<title>",
136 "title": "<title>",
133 "description": "<description>",
137 "description": "<description>",
134 "status" : "<status>",
138 "status" : "<status>",
135 "created_on": "<date_time_created>",
139 "created_on": "<date_time_created>",
136 "updated_on": "<date_time_updated>",
140 "updated_on": "<date_time_updated>",
137 "commit_ids": [
141 "commit_ids": [
138 ...
142 ...
139 "<commit_id>",
143 "<commit_id>",
140 "<commit_id>",
144 "<commit_id>",
141 ...
145 ...
142 ],
146 ],
143 "review_status": "<review_status>",
147 "review_status": "<review_status>",
144 "mergeable": {
148 "mergeable": {
145 "status": "<bool>",
149 "status": "<bool>",
146 "message": "<message>",
150 "message": "<message>",
147 },
151 },
148 "source": {
152 "source": {
149 "clone_url": "<clone_url>",
153 "clone_url": "<clone_url>",
150 "repository": "<repository_name>",
154 "repository": "<repository_name>",
151 "reference":
155 "reference":
152 {
156 {
153 "name": "<name>",
157 "name": "<name>",
154 "type": "<type>",
158 "type": "<type>",
155 "commit_id": "<commit_id>",
159 "commit_id": "<commit_id>",
156 }
160 }
157 },
161 },
158 "target": {
162 "target": {
159 "clone_url": "<clone_url>",
163 "clone_url": "<clone_url>",
160 "repository": "<repository_name>",
164 "repository": "<repository_name>",
161 "reference":
165 "reference":
162 {
166 {
163 "name": "<name>",
167 "name": "<name>",
164 "type": "<type>",
168 "type": "<type>",
165 "commit_id": "<commit_id>",
169 "commit_id": "<commit_id>",
166 }
170 }
167 },
171 },
172 "merge": {
173 "clone_url": "<clone_url>",
174 "reference":
175 {
176 "name": "<name>",
177 "type": "<type>",
178 "commit_id": "<commit_id>",
179 }
180 },
168 "author": <user_obj>,
181 "author": <user_obj>,
169 "reviewers": [
182 "reviewers": [
170 ...
183 ...
171 {
184 {
172 "user": "<user_obj>",
185 "user": "<user_obj>",
173 "review_status": "<review_status>",
186 "review_status": "<review_status>",
174 }
187 }
175 ...
188 ...
176 ]
189 ]
177 },
190 },
178 "error": null
191 "error": null
179
192
180
193
181 get_pull_requests
194 get_pull_requests
182 -----------------
195 -----------------
183
196
184 .. py:function:: get_pull_requests(apiuser, repoid, status=<Optional:'new'>)
197 .. py:function:: get_pull_requests(apiuser, repoid, status=<Optional:'new'>)
185
198
186 Get all pull requests from the repository specified in `repoid`.
199 Get all pull requests from the repository specified in `repoid`.
187
200
188 :param apiuser: This is filled automatically from the |authtoken|.
201 :param apiuser: This is filled automatically from the |authtoken|.
189 :type apiuser: AuthUser
202 :type apiuser: AuthUser
190 :param repoid: Repository name or repository ID.
203 :param repoid: Repository name or repository ID.
191 :type repoid: str or int
204 :type repoid: str or int
192 :param status: Only return pull requests with the specified status.
205 :param status: Only return pull requests with the specified status.
193 Valid options are.
206 Valid options are.
194 * ``new`` (default)
207 * ``new`` (default)
195 * ``open``
208 * ``open``
196 * ``closed``
209 * ``closed``
197 :type status: str
210 :type status: str
198
211
199 Example output:
212 Example output:
200
213
201 .. code-block:: bash
214 .. code-block:: bash
202
215
203 "id": <id_given_in_input>,
216 "id": <id_given_in_input>,
204 "result":
217 "result":
205 [
218 [
206 ...
219 ...
207 {
220 {
208 "pull_request_id": "<pull_request_id>",
221 "pull_request_id": "<pull_request_id>",
209 "url": "<url>",
222 "url": "<url>",
210 "title" : "<title>",
223 "title" : "<title>",
211 "description": "<description>",
224 "description": "<description>",
212 "status": "<status>",
225 "status": "<status>",
213 "created_on": "<date_time_created>",
226 "created_on": "<date_time_created>",
214 "updated_on": "<date_time_updated>",
227 "updated_on": "<date_time_updated>",
215 "commit_ids": [
228 "commit_ids": [
216 ...
229 ...
217 "<commit_id>",
230 "<commit_id>",
218 "<commit_id>",
231 "<commit_id>",
219 ...
232 ...
220 ],
233 ],
221 "review_status": "<review_status>",
234 "review_status": "<review_status>",
222 "mergeable": {
235 "mergeable": {
223 "status": "<bool>",
236 "status": "<bool>",
224 "message: "<message>",
237 "message: "<message>",
225 },
238 },
226 "source": {
239 "source": {
227 "clone_url": "<clone_url>",
240 "clone_url": "<clone_url>",
228 "reference":
241 "reference":
229 {
242 {
230 "name": "<name>",
243 "name": "<name>",
231 "type": "<type>",
244 "type": "<type>",
232 "commit_id": "<commit_id>",
245 "commit_id": "<commit_id>",
233 }
246 }
234 },
247 },
235 "target": {
248 "target": {
236 "clone_url": "<clone_url>",
249 "clone_url": "<clone_url>",
237 "reference":
250 "reference":
238 {
251 {
239 "name": "<name>",
252 "name": "<name>",
240 "type": "<type>",
253 "type": "<type>",
241 "commit_id": "<commit_id>",
254 "commit_id": "<commit_id>",
242 }
255 }
243 },
256 },
257 "merge": {
258 "clone_url": "<clone_url>",
259 "reference":
260 {
261 "name": "<name>",
262 "type": "<type>",
263 "commit_id": "<commit_id>",
264 }
265 },
244 "author": <user_obj>,
266 "author": <user_obj>,
245 "reviewers": [
267 "reviewers": [
246 ...
268 ...
247 {
269 {
248 "user": "<user_obj>",
270 "user": "<user_obj>",
249 "review_status": "<review_status>",
271 "review_status": "<review_status>",
250 }
272 }
251 ...
273 ...
252 ]
274 ]
253 }
275 }
254 ...
276 ...
255 ],
277 ],
256 "error": null
278 "error": null
257
279
258
280
259 merge_pull_request
281 merge_pull_request
260 ------------------
282 ------------------
261
283
262 .. py:function:: merge_pull_request(apiuser, repoid, pullrequestid, userid=<Optional:<OptionalAttr:apiuser>>)
284 .. py:function:: merge_pull_request(apiuser, repoid, pullrequestid, userid=<Optional:<OptionalAttr:apiuser>>)
263
285
264 Merge the pull request specified by `pullrequestid` into its target
286 Merge the pull request specified by `pullrequestid` into its target
265 repository.
287 repository.
266
288
267 :param apiuser: This is filled automatically from the |authtoken|.
289 :param apiuser: This is filled automatically from the |authtoken|.
268 :type apiuser: AuthUser
290 :type apiuser: AuthUser
269 :param repoid: The Repository name or repository ID of the
291 :param repoid: The Repository name or repository ID of the
270 target repository to which the |pr| is to be merged.
292 target repository to which the |pr| is to be merged.
271 :type repoid: str or int
293 :type repoid: str or int
272 :param pullrequestid: ID of the pull request which shall be merged.
294 :param pullrequestid: ID of the pull request which shall be merged.
273 :type pullrequestid: int
295 :type pullrequestid: int
274 :param userid: Merge the pull request as this user.
296 :param userid: Merge the pull request as this user.
275 :type userid: Optional(str or int)
297 :type userid: Optional(str or int)
276
298
277 Example output:
299 Example output:
278
300
279 .. code-block:: bash
301 .. code-block:: bash
280
302
281 "id": <id_given_in_input>,
303 "id": <id_given_in_input>,
282 "result":
304 "result":
283 {
305 {
284 "executed": "<bool>",
306 "executed": "<bool>",
285 "failure_reason": "<int>",
307 "failure_reason": "<int>",
286 "merge_commit_id": "<merge_commit_id>",
308 "merge_commit_id": "<merge_commit_id>",
287 "possible": "<bool>"
309 "possible": "<bool>",
310 "merge_ref": {
311 "commit_id": "<commit_id>",
312 "type": "<type>",
313 "name": "<name>"
314 }
288 },
315 },
289 "error": null
316 "error": null
290
317
291
318
292 update_pull_request
319 update_pull_request
293 -------------------
320 -------------------
294
321
295 .. py:function:: update_pull_request(apiuser, repoid, pullrequestid, title=<Optional:''>, description=<Optional:''>, reviewers=<Optional:None>, update_commits=<Optional:None>, close_pull_request=<Optional:None>)
322 .. py:function:: update_pull_request(apiuser, repoid, pullrequestid, title=<Optional:''>, description=<Optional:''>, reviewers=<Optional:None>, update_commits=<Optional:None>, close_pull_request=<Optional:None>)
296
323
297 Updates a pull request.
324 Updates a pull request.
298
325
299 :param apiuser: This is filled automatically from the |authtoken|.
326 :param apiuser: This is filled automatically from the |authtoken|.
300 :type apiuser: AuthUser
327 :type apiuser: AuthUser
301 :param repoid: The repository name or repository ID.
328 :param repoid: The repository name or repository ID.
302 :type repoid: str or int
329 :type repoid: str or int
303 :param pullrequestid: The pull request ID.
330 :param pullrequestid: The pull request ID.
304 :type pullrequestid: int
331 :type pullrequestid: int
305 :param title: Set the pull request title.
332 :param title: Set the pull request title.
306 :type title: str
333 :type title: str
307 :param description: Update pull request description.
334 :param description: Update pull request description.
308 :type description: Optional(str)
335 :type description: Optional(str)
309 :param reviewers: Update pull request reviewers list with new value.
336 :param reviewers: Update pull request reviewers list with new value.
310 :type reviewers: Optional(list)
337 :type reviewers: Optional(list)
311 :param update_commits: Trigger update of commits for this pull request
338 :param update_commits: Trigger update of commits for this pull request
312 :type: update_commits: Optional(bool)
339 :type: update_commits: Optional(bool)
313 :param close_pull_request: Close this pull request with rejected state
340 :param close_pull_request: Close this pull request with rejected state
314 :type: close_pull_request: Optional(bool)
341 :type: close_pull_request: Optional(bool)
315
342
316 Example output:
343 Example output:
317
344
318 .. code-block:: bash
345 .. code-block:: bash
319
346
320 id : <id_given_in_input>
347 id : <id_given_in_input>
321 result :
348 result :
322 {
349 {
323 "msg": "Updated pull request `63`",
350 "msg": "Updated pull request `63`",
324 "pull_request": <pull_request_object>,
351 "pull_request": <pull_request_object>,
325 "updated_reviewers": {
352 "updated_reviewers": {
326 "added": [
353 "added": [
327 "username"
354 "username"
328 ],
355 ],
329 "removed": []
356 "removed": []
330 },
357 },
331 "updated_commits": {
358 "updated_commits": {
332 "added": [
359 "added": [
333 "<sha1_hash>"
360 "<sha1_hash>"
334 ],
361 ],
335 "common": [
362 "common": [
336 "<sha1_hash>",
363 "<sha1_hash>",
337 "<sha1_hash>",
364 "<sha1_hash>",
338 ],
365 ],
339 "removed": []
366 "removed": []
340 }
367 }
341 }
368 }
342 error : null
369 error : null
343
370
344
371
@@ -1,350 +1,358 b''
1 .. _repo-group-methods-ref:
1 .. _repo-group-methods-ref:
2
2
3 repo_group methods
3 repo_group methods
4 =================
4 ==================
5
5
6 create_repo_group
6 create_repo_group
7 -----------------
7 -----------------
8
8
9 .. py:function:: create_repo_group(apiuser, group_name, description=<Optional:''>, owner=<Optional:<OptionalAttr:apiuser>>, copy_permissions=<Optional:False>)
9 .. py:function:: create_repo_group(apiuser, group_name, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, copy_permissions=<Optional:False>)
10
10
11 Creates a repository group.
11 Creates a repository group.
12
12
13 * If the repository group name contains "/", all the required repository
13 * If the repository group name contains "/", repository group will be
14 groups will be created.
14 created inside a repository group or nested repository groups
15
15
16 For example "foo/bar/baz" will create |repo| groups "foo" and "bar"
16 For example "foo/bar/group1" will create repository group called "group1"
17 (with "foo" as parent). It will also create the "baz" repository
17 inside group "foo/bar". You have to have permissions to access and
18 with "bar" as |repo| group.
18 write to the last repository group ("bar" in this example)
19
19
20 This command can only be run using an |authtoken| with admin
20 This command can only be run using an |authtoken| with at least
21 permissions.
21 permissions to create repository groups, or admin permissions to
22 parent repository groups.
22
23
23 :param apiuser: This is filled automatically from the |authtoken|.
24 :param apiuser: This is filled automatically from the |authtoken|.
24 :type apiuser: AuthUser
25 :type apiuser: AuthUser
25 :param group_name: Set the repository group name.
26 :param group_name: Set the repository group name.
26 :type group_name: str
27 :type group_name: str
27 :param description: Set the |repo| group description.
28 :param description: Set the |repo| group description.
28 :type description: str
29 :type description: str
29 :param owner: Set the |repo| group owner.
30 :param owner: Set the |repo| group owner.
30 :type owner: str
31 :type owner: str
31 :param copy_permissions:
32 :param copy_permissions:
32 :type copy_permissions:
33 :type copy_permissions:
33
34
34 Example output:
35 Example output:
35
36
36 .. code-block:: bash
37 .. code-block:: bash
37
38
38 id : <id_given_in_input>
39 id : <id_given_in_input>
39 result : {
40 result : {
40 "msg": "Created new repo group `<repo_group_name>`"
41 "msg": "Created new repo group `<repo_group_name>`"
41 "repo_group": <repogroup_object>
42 "repo_group": <repogroup_object>
42 }
43 }
43 error : null
44 error : null
44
45
45
46
46 Example error output:
47 Example error output:
47
48
48 .. code-block:: bash
49 .. code-block:: bash
49
50
50 id : <id_given_in_input>
51 id : <id_given_in_input>
51 result : null
52 result : null
52 error : {
53 error : {
53 failed to create repo group `<repogroupid>`
54 failed to create repo group `<repogroupid>`
54 }
55 }
55
56
56
57
57 delete_repo_group
58 delete_repo_group
58 -----------------
59 -----------------
59
60
60 .. py:function:: delete_repo_group(apiuser, repogroupid)
61 .. py:function:: delete_repo_group(apiuser, repogroupid)
61
62
62 Deletes a |repo| group.
63 Deletes a |repo| group.
63
64
64 :param apiuser: This is filled automatically from the |authtoken|.
65 :param apiuser: This is filled automatically from the |authtoken|.
65 :type apiuser: AuthUser
66 :type apiuser: AuthUser
66 :param repogroupid: Set the name or ID of repository group to be
67 :param repogroupid: Set the name or ID of repository group to be
67 deleted.
68 deleted.
68 :type repogroupid: str or int
69 :type repogroupid: str or int
69
70
70 Example output:
71 Example output:
71
72
72 .. code-block:: bash
73 .. code-block:: bash
73
74
74 id : <id_given_in_input>
75 id : <id_given_in_input>
75 result : {
76 result : {
76 'msg': 'deleted repo group ID:<repogroupid> <repogroupname>
77 'msg': 'deleted repo group ID:<repogroupid> <repogroupname>'
77 'repo_group': null
78 'repo_group': null
78 }
79 }
79 error : null
80 error : null
80
81
81 Example error output:
82 Example error output:
82
83
83 .. code-block:: bash
84 .. code-block:: bash
84
85
85 id : <id_given_in_input>
86 id : <id_given_in_input>
86 result : null
87 result : null
87 error : {
88 error : {
88 "failed to delete repo group ID:<repogroupid> <repogroupname>"
89 "failed to delete repo group ID:<repogroupid> <repogroupname>"
89 }
90 }
90
91
91
92
92 get_repo_group
93 get_repo_group
93 --------------
94 --------------
94
95
95 .. py:function:: get_repo_group(apiuser, repogroupid)
96 .. py:function:: get_repo_group(apiuser, repogroupid)
96
97
97 Return the specified |repo| group, along with permissions,
98 Return the specified |repo| group, along with permissions,
98 and repositories inside the group
99 and repositories inside the group
99
100
100 :param apiuser: This is filled automatically from the |authtoken|.
101 :param apiuser: This is filled automatically from the |authtoken|.
101 :type apiuser: AuthUser
102 :type apiuser: AuthUser
102 :param repogroupid: Specify the name of ID of the repository group.
103 :param repogroupid: Specify the name of ID of the repository group.
103 :type repogroupid: str or int
104 :type repogroupid: str or int
104
105
105
106
106 Example output:
107 Example output:
107
108
108 .. code-block:: bash
109 .. code-block:: bash
109
110
110 {
111 {
111 "error": null,
112 "error": null,
112 "id": repo-group-id,
113 "id": repo-group-id,
113 "result": {
114 "result": {
114 "group_description": "repo group description",
115 "group_description": "repo group description",
115 "group_id": 14,
116 "group_id": 14,
116 "group_name": "group name",
117 "group_name": "group name",
117 "members": [
118 "members": [
118 {
119 {
119 "name": "super-admin-username",
120 "name": "super-admin-username",
120 "origin": "super-admin",
121 "origin": "super-admin",
121 "permission": "group.admin",
122 "permission": "group.admin",
122 "type": "user"
123 "type": "user"
123 },
124 },
124 {
125 {
125 "name": "owner-name",
126 "name": "owner-name",
126 "origin": "owner",
127 "origin": "owner",
127 "permission": "group.admin",
128 "permission": "group.admin",
128 "type": "user"
129 "type": "user"
129 },
130 },
130 {
131 {
131 "name": "user-group-name",
132 "name": "user-group-name",
132 "origin": "permission",
133 "origin": "permission",
133 "permission": "group.write",
134 "permission": "group.write",
134 "type": "user_group"
135 "type": "user_group"
135 }
136 }
136 ],
137 ],
137 "owner": "owner-name",
138 "owner": "owner-name",
138 "parent_group": null,
139 "parent_group": null,
139 "repositories": [ repo-list ]
140 "repositories": [ repo-list ]
140 }
141 }
141 }
142 }
142
143
143
144
144 get_repo_groups
145 get_repo_groups
145 ---------------
146 ---------------
146
147
147 .. py:function:: get_repo_groups(apiuser)
148 .. py:function:: get_repo_groups(apiuser)
148
149
149 Returns all repository groups.
150 Returns all repository groups.
150
151
151 :param apiuser: This is filled automatically from the |authtoken|.
152 :param apiuser: This is filled automatically from the |authtoken|.
152 :type apiuser: AuthUser
153 :type apiuser: AuthUser
153
154
154
155
155 grant_user_group_permission_to_repo_group
156 grant_user_group_permission_to_repo_group
156 -----------------------------------------
157 -----------------------------------------
157
158
158 .. py:function:: grant_user_group_permission_to_repo_group(apiuser, repogroupid, usergroupid, perm, apply_to_children=<Optional:'none'>)
159 .. py:function:: grant_user_group_permission_to_repo_group(apiuser, repogroupid, usergroupid, perm, apply_to_children=<Optional:'none'>)
159
160
160 Grant permission for a user group on given repository group, or update
161 Grant permission for a user group on given repository group, or update
161 existing permissions if found.
162 existing permissions if found.
162
163
163 This command can only be run using an |authtoken| with admin
164 This command can only be run using an |authtoken| with admin
164 permissions on the |repo| group.
165 permissions on the |repo| group.
165
166
166 :param apiuser: This is filled automatically from the |authtoken|.
167 :param apiuser: This is filled automatically from the |authtoken|.
167 :type apiuser: AuthUser
168 :type apiuser: AuthUser
168 :param repogroupid: Set the name or id of repository group
169 :param repogroupid: Set the name or id of repository group
169 :type repogroupid: str or int
170 :type repogroupid: str or int
170 :param usergroupid: id of usergroup
171 :param usergroupid: id of usergroup
171 :type usergroupid: str or int
172 :type usergroupid: str or int
172 :param perm: (group.(none|read|write|admin))
173 :param perm: (group.(none|read|write|admin))
173 :type perm: str
174 :type perm: str
174 :param apply_to_children: 'none', 'repos', 'groups', 'all'
175 :param apply_to_children: 'none', 'repos', 'groups', 'all'
175 :type apply_to_children: str
176 :type apply_to_children: str
176
177
177 Example output:
178 Example output:
178
179
179 .. code-block:: bash
180 .. code-block:: bash
180
181
181 id : <id_given_in_input>
182 id : <id_given_in_input>
182 result : {
183 result : {
183 "msg" : "Granted perm: `<perm>` (recursive:<apply_to_children>) for user group: `<usersgroupname>` in repo group: `<repo_group_name>`",
184 "msg" : "Granted perm: `<perm>` (recursive:<apply_to_children>) for user group: `<usersgroupname>` in repo group: `<repo_group_name>`",
184 "success": true
185 "success": true
185
186
186 }
187 }
187 error : null
188 error : null
188
189
189 Example error output:
190 Example error output:
190
191
191 .. code-block:: bash
192 .. code-block:: bash
192
193
193 id : <id_given_in_input>
194 id : <id_given_in_input>
194 result : null
195 result : null
195 error : {
196 error : {
196 "failed to edit permission for user group: `<usergroup>` in repo group: `<repo_group_name>`"
197 "failed to edit permission for user group: `<usergroup>` in repo group: `<repo_group_name>`"
197 }
198 }
198
199
199
200
200 grant_user_permission_to_repo_group
201 grant_user_permission_to_repo_group
201 -----------------------------------
202 -----------------------------------
202
203
203 .. py:function:: grant_user_permission_to_repo_group(apiuser, repogroupid, userid, perm, apply_to_children=<Optional:'none'>)
204 .. py:function:: grant_user_permission_to_repo_group(apiuser, repogroupid, userid, perm, apply_to_children=<Optional:'none'>)
204
205
205 Grant permission for a user on the given repository group, or update
206 Grant permission for a user on the given repository group, or update
206 existing permissions if found.
207 existing permissions if found.
207
208
208 This command can only be run using an |authtoken| with admin
209 This command can only be run using an |authtoken| with admin
209 permissions.
210 permissions.
210
211
211 :param apiuser: This is filled automatically from the |authtoken|.
212 :param apiuser: This is filled automatically from the |authtoken|.
212 :type apiuser: AuthUser
213 :type apiuser: AuthUser
213 :param repogroupid: Set the name or ID of repository group.
214 :param repogroupid: Set the name or ID of repository group.
214 :type repogroupid: str or int
215 :type repogroupid: str or int
215 :param userid: Set the user name.
216 :param userid: Set the user name.
216 :type userid: str
217 :type userid: str
217 :param perm: (group.(none|read|write|admin))
218 :param perm: (group.(none|read|write|admin))
218 :type perm: str
219 :type perm: str
219 :param apply_to_children: 'none', 'repos', 'groups', 'all'
220 :param apply_to_children: 'none', 'repos', 'groups', 'all'
220 :type apply_to_children: str
221 :type apply_to_children: str
221
222
222 Example output:
223 Example output:
223
224
224 .. code-block:: bash
225 .. code-block:: bash
225
226
226 id : <id_given_in_input>
227 id : <id_given_in_input>
227 result: {
228 result: {
228 "msg" : "Granted perm: `<perm>` (recursive:<apply_to_children>) for user: `<username>` in repo group: `<repo_group_name>`",
229 "msg" : "Granted perm: `<perm>` (recursive:<apply_to_children>) for user: `<username>` in repo group: `<repo_group_name>`",
229 "success": true
230 "success": true
230 }
231 }
231 error: null
232 error: null
232
233
233 Example error output:
234 Example error output:
234
235
235 .. code-block:: bash
236 .. code-block:: bash
236
237
237 id : <id_given_in_input>
238 id : <id_given_in_input>
238 result : null
239 result : null
239 error : {
240 error : {
240 "failed to edit permission for user: `<userid>` in repo group: `<repo_group_name>`"
241 "failed to edit permission for user: `<userid>` in repo group: `<repo_group_name>`"
241 }
242 }
242
243
243
244
244 revoke_user_group_permission_from_repo_group
245 revoke_user_group_permission_from_repo_group
245 --------------------------------------------
246 --------------------------------------------
246
247
247 .. py:function:: revoke_user_group_permission_from_repo_group(apiuser, repogroupid, usergroupid, apply_to_children=<Optional:'none'>)
248 .. py:function:: revoke_user_group_permission_from_repo_group(apiuser, repogroupid, usergroupid, apply_to_children=<Optional:'none'>)
248
249
249 Revoke permission for user group on given repository.
250 Revoke permission for user group on given repository.
250
251
251 This command can only be run using an |authtoken| with admin
252 This command can only be run using an |authtoken| with admin
252 permissions on the |repo| group.
253 permissions on the |repo| group.
253
254
254 :param apiuser: This is filled automatically from the |authtoken|.
255 :param apiuser: This is filled automatically from the |authtoken|.
255 :type apiuser: AuthUser
256 :type apiuser: AuthUser
256 :param repogroupid: name or id of repository group
257 :param repogroupid: name or id of repository group
257 :type repogroupid: str or int
258 :type repogroupid: str or int
258 :param usergroupid:
259 :param usergroupid:
259 :param apply_to_children: 'none', 'repos', 'groups', 'all'
260 :param apply_to_children: 'none', 'repos', 'groups', 'all'
260 :type apply_to_children: str
261 :type apply_to_children: str
261
262
262 Example output:
263 Example output:
263
264
264 .. code-block:: bash
265 .. code-block:: bash
265
266
266 id : <id_given_in_input>
267 id : <id_given_in_input>
267 result: {
268 result: {
268 "msg" : "Revoked perm (recursive:<apply_to_children>) for user group: `<usersgroupname>` in repo group: `<repo_group_name>`",
269 "msg" : "Revoked perm (recursive:<apply_to_children>) for user group: `<usersgroupname>` in repo group: `<repo_group_name>`",
269 "success": true
270 "success": true
270 }
271 }
271 error: null
272 error: null
272
273
273 Example error output:
274 Example error output:
274
275
275 .. code-block:: bash
276 .. code-block:: bash
276
277
277 id : <id_given_in_input>
278 id : <id_given_in_input>
278 result : null
279 result : null
279 error : {
280 error : {
280 "failed to edit permission for user group: `<usergroup>` in repo group: `<repo_group_name>`"
281 "failed to edit permission for user group: `<usergroup>` in repo group: `<repo_group_name>`"
281 }
282 }
282
283
283
284
284 revoke_user_permission_from_repo_group
285 revoke_user_permission_from_repo_group
285 --------------------------------------
286 --------------------------------------
286
287
287 .. py:function:: revoke_user_permission_from_repo_group(apiuser, repogroupid, userid, apply_to_children=<Optional:'none'>)
288 .. py:function:: revoke_user_permission_from_repo_group(apiuser, repogroupid, userid, apply_to_children=<Optional:'none'>)
288
289
289 Revoke permission for a user in a given repository group.
290 Revoke permission for a user in a given repository group.
290
291
291 This command can only be run using an |authtoken| with admin
292 This command can only be run using an |authtoken| with admin
292 permissions on the |repo| group.
293 permissions on the |repo| group.
293
294
294 :param apiuser: This is filled automatically from the |authtoken|.
295 :param apiuser: This is filled automatically from the |authtoken|.
295 :type apiuser: AuthUser
296 :type apiuser: AuthUser
296 :param repogroupid: Set the name or ID of the repository group.
297 :param repogroupid: Set the name or ID of the repository group.
297 :type repogroupid: str or int
298 :type repogroupid: str or int
298 :param userid: Set the user name to revoke.
299 :param userid: Set the user name to revoke.
299 :type userid: str
300 :type userid: str
300 :param apply_to_children: 'none', 'repos', 'groups', 'all'
301 :param apply_to_children: 'none', 'repos', 'groups', 'all'
301 :type apply_to_children: str
302 :type apply_to_children: str
302
303
303 Example output:
304 Example output:
304
305
305 .. code-block:: bash
306 .. code-block:: bash
306
307
307 id : <id_given_in_input>
308 id : <id_given_in_input>
308 result: {
309 result: {
309 "msg" : "Revoked perm (recursive:<apply_to_children>) for user: `<username>` in repo group: `<repo_group_name>`",
310 "msg" : "Revoked perm (recursive:<apply_to_children>) for user: `<username>` in repo group: `<repo_group_name>`",
310 "success": true
311 "success": true
311 }
312 }
312 error: null
313 error: null
313
314
314 Example error output:
315 Example error output:
315
316
316 .. code-block:: bash
317 .. code-block:: bash
317
318
318 id : <id_given_in_input>
319 id : <id_given_in_input>
319 result : null
320 result : null
320 error : {
321 error : {
321 "failed to edit permission for user: `<userid>` in repo group: `<repo_group_name>`"
322 "failed to edit permission for user: `<userid>` in repo group: `<repo_group_name>`"
322 }
323 }
323
324
324
325
325 update_repo_group
326 update_repo_group
326 -----------------
327 -----------------
327
328
328 .. py:function:: update_repo_group(apiuser, repogroupid, group_name=<Optional:''>, description=<Optional:''>, owner=<Optional:<OptionalAttr:apiuser>>, parent=<Optional:None>, enable_locking=<Optional:False>)
329 .. py:function:: update_repo_group(apiuser, repogroupid, group_name=<Optional:''>, description=<Optional:''>, owner=<Optional:<OptionalAttr:apiuser>>, enable_locking=<Optional:False>)
329
330
330 Updates repository group with the details given.
331 Updates repository group with the details given.
331
332
332 This command can only be run using an |authtoken| with admin
333 This command can only be run using an |authtoken| with admin
333 permissions.
334 permissions.
334
335
336 * If the group_name name contains "/", repository group will be updated
337 accordingly with a repository group or nested repository groups
338
339 For example repogroupid=group-test group_name="foo/bar/group-test"
340 will update repository group called "group-test" and place it
341 inside group "foo/bar".
342 You have to have permissions to access and write to the last repository
343 group ("bar" in this example)
344
335 :param apiuser: This is filled automatically from the |authtoken|.
345 :param apiuser: This is filled automatically from the |authtoken|.
336 :type apiuser: AuthUser
346 :type apiuser: AuthUser
337 :param repogroupid: Set the ID of repository group.
347 :param repogroupid: Set the ID of repository group.
338 :type repogroupid: str or int
348 :type repogroupid: str or int
339 :param group_name: Set the name of the |repo| group.
349 :param group_name: Set the name of the |repo| group.
340 :type group_name: str
350 :type group_name: str
341 :param description: Set a description for the group.
351 :param description: Set a description for the group.
342 :type description: str
352 :type description: str
343 :param owner: Set the |repo| group owner.
353 :param owner: Set the |repo| group owner.
344 :type owner: str
354 :type owner: str
345 :param parent: Set the |repo| group parent.
346 :type parent: str or int
347 :param enable_locking: Enable |repo| locking. The default is false.
355 :param enable_locking: Enable |repo| locking. The default is false.
348 :type enable_locking: bool
356 :type enable_locking: bool
349
357
350
358
@@ -1,967 +1,976 b''
1 .. _repo-methods-ref:
1 .. _repo-methods-ref:
2
2
3 repo methods
3 repo methods
4 =================
4 ============
5
5
6 add_field_to_repo
6 add_field_to_repo
7 -----------------
7 -----------------
8
8
9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
9 .. py:function:: add_field_to_repo(apiuser, repoid, key, label=<Optional:''>, description=<Optional:''>)
10
10
11 Adds an extra field to a repository.
11 Adds an extra field to a repository.
12
12
13 This command can only be run using an |authtoken| with at least
13 This command can only be run using an |authtoken| with at least
14 write permissions to the |repo|.
14 write permissions to the |repo|.
15
15
16 :param apiuser: This is filled automatically from the |authtoken|.
16 :param apiuser: This is filled automatically from the |authtoken|.
17 :type apiuser: AuthUser
17 :type apiuser: AuthUser
18 :param repoid: Set the repository name or repository id.
18 :param repoid: Set the repository name or repository id.
19 :type repoid: str or int
19 :type repoid: str or int
20 :param key: Create a unique field key for this repository.
20 :param key: Create a unique field key for this repository.
21 :type key: str
21 :type key: str
22 :param label:
22 :param label:
23 :type label: Optional(str)
23 :type label: Optional(str)
24 :param description:
24 :param description:
25 :type description: Optional(str)
25 :type description: Optional(str)
26
26
27
27
28 comment_commit
28 comment_commit
29 --------------
29 --------------
30
30
31 .. py:function:: comment_commit(apiuser, repoid, commit_id, message, userid=<Optional:<OptionalAttr:apiuser>>, status=<Optional:None>)
31 .. py:function:: comment_commit(apiuser, repoid, commit_id, message, userid=<Optional:<OptionalAttr:apiuser>>, status=<Optional:None>)
32
32
33 Set a commit comment, and optionally change the status of the commit.
33 Set a commit comment, and optionally change the status of the commit.
34
34
35 :param apiuser: This is filled automatically from the |authtoken|.
35 :param apiuser: This is filled automatically from the |authtoken|.
36 :type apiuser: AuthUser
36 :type apiuser: AuthUser
37 :param repoid: Set the repository name or repository ID.
37 :param repoid: Set the repository name or repository ID.
38 :type repoid: str or int
38 :type repoid: str or int
39 :param commit_id: Specify the commit_id for which to set a comment.
39 :param commit_id: Specify the commit_id for which to set a comment.
40 :type commit_id: str
40 :type commit_id: str
41 :param message: The comment text.
41 :param message: The comment text.
42 :type message: str
42 :type message: str
43 :param userid: Set the user name of the comment creator.
43 :param userid: Set the user name of the comment creator.
44 :type userid: Optional(str or int)
44 :type userid: Optional(str or int)
45 :param status: status, one of 'not_reviewed', 'approved', 'rejected',
45 :param status: status, one of 'not_reviewed', 'approved', 'rejected',
46 'under_review'
46 'under_review'
47 :type status: str
47 :type status: str
48
48
49 Example error output:
49 Example error output:
50
50
51 .. code-block:: json
51 .. code-block:: json
52
52
53 {
53 {
54 "id" : <id_given_in_input>,
54 "id" : <id_given_in_input>,
55 "result" : {
55 "result" : {
56 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
56 "msg": "Commented on commit `<commit_id>` for repository `<repoid>`",
57 "status_change": null or <status>,
57 "status_change": null or <status>,
58 "success": true
58 "success": true
59 },
59 },
60 "error" : null
60 "error" : null
61 }
61 }
62
62
63
63
64 create_repo
64 create_repo
65 -----------
65 -----------
66
66
67 .. 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>)
67 .. 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>)
68
68
69 Creates a repository.
69 Creates a repository.
70
70
71 * If the repository name contains "/", all the required repository
71 * If the repository name contains "/", repository will be created inside
72 groups will be created.
72 a repository group or nested repository groups
73
73
74 For example "foo/bar/baz" will create |repo| groups "foo" and "bar"
74 For example "foo/bar/repo1" will create |repo| called "repo1" inside
75 (with "foo" as parent). It will also create the "baz" repository
75 group "foo/bar". You have to have permissions to access and write to
76 with "bar" as |repo| group.
76 the last repository group ("bar" in this example)
77
77
78 This command can only be run using an |authtoken| with at least
78 This command can only be run using an |authtoken| with at least
79 write permissions to the |repo|.
79 permissions to create repositories, or write permissions to
80 parent repository groups.
80
81
81 :param apiuser: This is filled automatically from the |authtoken|.
82 :param apiuser: This is filled automatically from the |authtoken|.
82 :type apiuser: AuthUser
83 :type apiuser: AuthUser
83 :param repo_name: Set the repository name.
84 :param repo_name: Set the repository name.
84 :type repo_name: str
85 :type repo_name: str
85 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
86 :param repo_type: Set the repository type; 'hg','git', or 'svn'.
86 :type repo_type: str
87 :type repo_type: str
87 :param owner: user_id or username
88 :param owner: user_id or username
88 :type owner: Optional(str)
89 :type owner: Optional(str)
89 :param description: Set the repository description.
90 :param description: Set the repository description.
90 :type description: Optional(str)
91 :type description: Optional(str)
91 :param private:
92 :param private: set repository as private
92 :type private: bool
93 :type private: bool
93 :param clone_uri:
94 :param clone_uri: set clone_uri
94 :type clone_uri: str
95 :type clone_uri: str
95 :param landing_rev: <rev_type>:<rev>
96 :param landing_rev: <rev_type>:<rev>
96 :type landing_rev: str
97 :type landing_rev: str
97 :param enable_locking:
98 :param enable_locking:
98 :type enable_locking: bool
99 :type enable_locking: bool
99 :param enable_downloads:
100 :param enable_downloads:
100 :type enable_downloads: bool
101 :type enable_downloads: bool
101 :param enable_statistics:
102 :param enable_statistics:
102 :type enable_statistics: bool
103 :type enable_statistics: bool
103 :param copy_permissions: Copy permission from group in which the
104 :param copy_permissions: Copy permission from group in which the
104 repository is being created.
105 repository is being created.
105 :type copy_permissions: bool
106 :type copy_permissions: bool
106
107
107
108
108 Example output:
109 Example output:
109
110
110 .. code-block:: bash
111 .. code-block:: bash
111
112
112 id : <id_given_in_input>
113 id : <id_given_in_input>
113 result: {
114 result: {
114 "msg": "Created new repository `<reponame>`",
115 "msg": "Created new repository `<reponame>`",
115 "success": true,
116 "success": true,
116 "task": "<celery task id or None if done sync>"
117 "task": "<celery task id or None if done sync>"
117 }
118 }
118 error: null
119 error: null
119
120
120
121
121 Example error output:
122 Example error output:
122
123
123 .. code-block:: bash
124 .. code-block:: bash
124
125
125 id : <id_given_in_input>
126 id : <id_given_in_input>
126 result : null
127 result : null
127 error : {
128 error : {
128 'failed to create repository `<repo_name>`
129 'failed to create repository `<repo_name>`'
129 }
130 }
130
131
131
132
132 delete_repo
133 delete_repo
133 -----------
134 -----------
134
135
135 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
136 .. py:function:: delete_repo(apiuser, repoid, forks=<Optional:''>)
136
137
137 Deletes a repository.
138 Deletes a repository.
138
139
139 * When the `forks` parameter is set it's possible to detach or delete
140 * When the `forks` parameter is set it's possible to detach or delete
140 forks of deleted repository.
141 forks of deleted repository.
141
142
142 This command can only be run using an |authtoken| with admin
143 This command can only be run using an |authtoken| with admin
143 permissions on the |repo|.
144 permissions on the |repo|.
144
145
145 :param apiuser: This is filled automatically from the |authtoken|.
146 :param apiuser: This is filled automatically from the |authtoken|.
146 :type apiuser: AuthUser
147 :type apiuser: AuthUser
147 :param repoid: Set the repository name or repository ID.
148 :param repoid: Set the repository name or repository ID.
148 :type repoid: str or int
149 :type repoid: str or int
149 :param forks: Set to `detach` or `delete` forks from the |repo|.
150 :param forks: Set to `detach` or `delete` forks from the |repo|.
150 :type forks: Optional(str)
151 :type forks: Optional(str)
151
152
152 Example error output:
153 Example error output:
153
154
154 .. code-block:: bash
155 .. code-block:: bash
155
156
156 id : <id_given_in_input>
157 id : <id_given_in_input>
157 result: {
158 result: {
158 "msg": "Deleted repository `<reponame>`",
159 "msg": "Deleted repository `<reponame>`",
159 "success": true
160 "success": true
160 }
161 }
161 error: null
162 error: null
162
163
163
164
164 fork_repo
165 fork_repo
165 ---------
166 ---------
166
167
167 .. py:function:: fork_repo(apiuser, repoid, fork_name, owner=<Optional:<OptionalAttr:apiuser>>, description=<Optional:''>, copy_permissions=<Optional:False>, private=<Optional:False>, landing_rev=<Optional:'rev:tip'>)
168 .. 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>)
168
169
169 Creates a fork of the specified |repo|.
170 Creates a fork of the specified |repo|.
170
171
171 * If using |RCE| with Celery this will immediately return a success
172 * If the fork_name contains "/", fork will be created inside
172 message, even though the fork will be created asynchronously.
173 a repository group or nested repository groups
173
174
174 This command can only be run using an |authtoken| with fork
175 For example "foo/bar/fork-repo" will create fork called "fork-repo"
175 permissions on the |repo|.
176 inside group "foo/bar". You have to have permissions to access and
177 write to the last repository group ("bar" in this example)
178
179 This command can only be run using an |authtoken| with minimum
180 read permissions of the forked repo, create fork permissions for an user.
176
181
177 :param apiuser: This is filled automatically from the |authtoken|.
182 :param apiuser: This is filled automatically from the |authtoken|.
178 :type apiuser: AuthUser
183 :type apiuser: AuthUser
179 :param repoid: Set repository name or repository ID.
184 :param repoid: Set repository name or repository ID.
180 :type repoid: str or int
185 :type repoid: str or int
181 :param fork_name: Set the fork name.
186 :param fork_name: Set the fork name, including it's repository group membership.
182 :type fork_name: str
187 :type fork_name: str
183 :param owner: Set the fork owner.
188 :param owner: Set the fork owner.
184 :type owner: str
189 :type owner: str
185 :param description: Set the fork descripton.
190 :param description: Set the fork description.
186 :type description: str
191 :type description: str
187 :param copy_permissions: Copy permissions from parent |repo|. The
192 :param copy_permissions: Copy permissions from parent |repo|. The
188 default is False.
193 default is False.
189 :type copy_permissions: bool
194 :type copy_permissions: bool
190 :param private: Make the fork private. The default is False.
195 :param private: Make the fork private. The default is False.
191 :type private: bool
196 :type private: bool
192 :param landing_rev: Set the landing revision. The default is tip.
197 :param landing_rev: Set the landing revision. The default is tip.
193
198
194 Example output:
199 Example output:
195
200
196 .. code-block:: bash
201 .. code-block:: bash
197
202
198 id : <id_for_response>
203 id : <id_for_response>
199 api_key : "<api_key>"
204 api_key : "<api_key>"
200 args: {
205 args: {
201 "repoid" : "<reponame or repo_id>",
206 "repoid" : "<reponame or repo_id>",
202 "fork_name": "<forkname>",
207 "fork_name": "<forkname>",
203 "owner": "<username or user_id = Optional(=apiuser)>",
208 "owner": "<username or user_id = Optional(=apiuser)>",
204 "description": "<description>",
209 "description": "<description>",
205 "copy_permissions": "<bool>",
210 "copy_permissions": "<bool>",
206 "private": "<bool>",
211 "private": "<bool>",
207 "landing_rev": "<landing_rev>"
212 "landing_rev": "<landing_rev>"
208 }
213 }
209
214
210 Example error output:
215 Example error output:
211
216
212 .. code-block:: bash
217 .. code-block:: bash
213
218
214 id : <id_given_in_input>
219 id : <id_given_in_input>
215 result: {
220 result: {
216 "msg": "Created fork of `<reponame>` as `<forkname>`",
221 "msg": "Created fork of `<reponame>` as `<forkname>`",
217 "success": true,
222 "success": true,
218 "task": "<celery task id or None if done sync>"
223 "task": "<celery task id or None if done sync>"
219 }
224 }
220 error: null
225 error: null
221
226
222
227
223 get_repo
228 get_repo
224 --------
229 --------
225
230
226 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
231 .. py:function:: get_repo(apiuser, repoid, cache=<Optional:True>)
227
232
228 Gets an existing repository by its name or repository_id.
233 Gets an existing repository by its name or repository_id.
229
234
230 The members section so the output returns users groups or users
235 The members section so the output returns users groups or users
231 associated with that repository.
236 associated with that repository.
232
237
233 This command can only be run using an |authtoken| with admin rights,
238 This command can only be run using an |authtoken| with admin rights,
234 or users with at least read rights to the |repo|.
239 or users with at least read rights to the |repo|.
235
240
236 :param apiuser: This is filled automatically from the |authtoken|.
241 :param apiuser: This is filled automatically from the |authtoken|.
237 :type apiuser: AuthUser
242 :type apiuser: AuthUser
238 :param repoid: The repository name or repository id.
243 :param repoid: The repository name or repository id.
239 :type repoid: str or int
244 :type repoid: str or int
240 :param cache: use the cached value for last changeset
245 :param cache: use the cached value for last changeset
241 :type: cache: Optional(bool)
246 :type: cache: Optional(bool)
242
247
243 Example output:
248 Example output:
244
249
245 .. code-block:: bash
250 .. code-block:: bash
246
251
247 {
252 {
248 "error": null,
253 "error": null,
249 "id": <repo_id>,
254 "id": <repo_id>,
250 "result": {
255 "result": {
251 "clone_uri": null,
256 "clone_uri": null,
252 "created_on": "timestamp",
257 "created_on": "timestamp",
253 "description": "repo description",
258 "description": "repo description",
254 "enable_downloads": false,
259 "enable_downloads": false,
255 "enable_locking": false,
260 "enable_locking": false,
256 "enable_statistics": false,
261 "enable_statistics": false,
257 "followers": [
262 "followers": [
258 {
263 {
259 "active": true,
264 "active": true,
260 "admin": false,
265 "admin": false,
261 "api_key": "****************************************",
266 "api_key": "****************************************",
262 "api_keys": [
267 "api_keys": [
263 "****************************************"
268 "****************************************"
264 ],
269 ],
265 "email": "user@example.com",
270 "email": "user@example.com",
266 "emails": [
271 "emails": [
267 "user@example.com"
272 "user@example.com"
268 ],
273 ],
269 "extern_name": "rhodecode",
274 "extern_name": "rhodecode",
270 "extern_type": "rhodecode",
275 "extern_type": "rhodecode",
271 "firstname": "username",
276 "firstname": "username",
272 "ip_addresses": [],
277 "ip_addresses": [],
273 "language": null,
278 "language": null,
274 "last_login": "2015-09-16T17:16:35.854",
279 "last_login": "2015-09-16T17:16:35.854",
275 "lastname": "surname",
280 "lastname": "surname",
276 "user_id": <user_id>,
281 "user_id": <user_id>,
277 "username": "name"
282 "username": "name"
278 }
283 }
279 ],
284 ],
280 "fork_of": "parent-repo",
285 "fork_of": "parent-repo",
281 "landing_rev": [
286 "landing_rev": [
282 "rev",
287 "rev",
283 "tip"
288 "tip"
284 ],
289 ],
285 "last_changeset": {
290 "last_changeset": {
286 "author": "User <user@example.com>",
291 "author": "User <user@example.com>",
287 "branch": "default",
292 "branch": "default",
288 "date": "timestamp",
293 "date": "timestamp",
289 "message": "last commit message",
294 "message": "last commit message",
290 "parents": [
295 "parents": [
291 {
296 {
292 "raw_id": "commit-id"
297 "raw_id": "commit-id"
293 }
298 }
294 ],
299 ],
295 "raw_id": "commit-id",
300 "raw_id": "commit-id",
296 "revision": <revision number>,
301 "revision": <revision number>,
297 "short_id": "short id"
302 "short_id": "short id"
298 },
303 },
299 "lock_reason": null,
304 "lock_reason": null,
300 "locked_by": null,
305 "locked_by": null,
301 "locked_date": null,
306 "locked_date": null,
302 "members": [
307 "members": [
303 {
308 {
304 "name": "super-admin-name",
309 "name": "super-admin-name",
305 "origin": "super-admin",
310 "origin": "super-admin",
306 "permission": "repository.admin",
311 "permission": "repository.admin",
307 "type": "user"
312 "type": "user"
308 },
313 },
309 {
314 {
310 "name": "owner-name",
315 "name": "owner-name",
311 "origin": "owner",
316 "origin": "owner",
312 "permission": "repository.admin",
317 "permission": "repository.admin",
313 "type": "user"
318 "type": "user"
314 },
319 },
315 {
320 {
316 "name": "user-group-name",
321 "name": "user-group-name",
317 "origin": "permission",
322 "origin": "permission",
318 "permission": "repository.write",
323 "permission": "repository.write",
319 "type": "user_group"
324 "type": "user_group"
320 }
325 }
321 ],
326 ],
322 "owner": "owner-name",
327 "owner": "owner-name",
323 "permissions": [
328 "permissions": [
324 {
329 {
325 "name": "super-admin-name",
330 "name": "super-admin-name",
326 "origin": "super-admin",
331 "origin": "super-admin",
327 "permission": "repository.admin",
332 "permission": "repository.admin",
328 "type": "user"
333 "type": "user"
329 },
334 },
330 {
335 {
331 "name": "owner-name",
336 "name": "owner-name",
332 "origin": "owner",
337 "origin": "owner",
333 "permission": "repository.admin",
338 "permission": "repository.admin",
334 "type": "user"
339 "type": "user"
335 },
340 },
336 {
341 {
337 "name": "user-group-name",
342 "name": "user-group-name",
338 "origin": "permission",
343 "origin": "permission",
339 "permission": "repository.write",
344 "permission": "repository.write",
340 "type": "user_group"
345 "type": "user_group"
341 }
346 }
342 ],
347 ],
343 "private": true,
348 "private": true,
344 "repo_id": 676,
349 "repo_id": 676,
345 "repo_name": "user-group/repo-name",
350 "repo_name": "user-group/repo-name",
346 "repo_type": "hg"
351 "repo_type": "hg"
347 }
352 }
348 }
353 }
349
354
350
355
351 get_repo_changeset
356 get_repo_changeset
352 ------------------
357 ------------------
353
358
354 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
359 .. py:function:: get_repo_changeset(apiuser, repoid, revision, details=<Optional:'basic'>)
355
360
356 Returns information about a changeset.
361 Returns information about a changeset.
357
362
358 Additionally parameters define the amount of details returned by
363 Additionally parameters define the amount of details returned by
359 this function.
364 this function.
360
365
361 This command can only be run using an |authtoken| with admin rights,
366 This command can only be run using an |authtoken| with admin rights,
362 or users with at least read rights to the |repo|.
367 or users with at least read rights to the |repo|.
363
368
364 :param apiuser: This is filled automatically from the |authtoken|.
369 :param apiuser: This is filled automatically from the |authtoken|.
365 :type apiuser: AuthUser
370 :type apiuser: AuthUser
366 :param repoid: The repository name or repository id
371 :param repoid: The repository name or repository id
367 :type repoid: str or int
372 :type repoid: str or int
368 :param revision: revision for which listing should be done
373 :param revision: revision for which listing should be done
369 :type revision: str
374 :type revision: str
370 :param details: details can be 'basic|extended|full' full gives diff
375 :param details: details can be 'basic|extended|full' full gives diff
371 info details like the diff itself, and number of changed files etc.
376 info details like the diff itself, and number of changed files etc.
372 :type details: Optional(str)
377 :type details: Optional(str)
373
378
374
379
375 get_repo_changesets
380 get_repo_changesets
376 -------------------
381 -------------------
377
382
378 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
383 .. py:function:: get_repo_changesets(apiuser, repoid, start_rev, limit, details=<Optional:'basic'>)
379
384
380 Returns a set of commits limited by the number starting
385 Returns a set of commits limited by the number starting
381 from the `start_rev` option.
386 from the `start_rev` option.
382
387
383 Additional parameters define the amount of details returned by this
388 Additional parameters define the amount of details returned by this
384 function.
389 function.
385
390
386 This command can only be run using an |authtoken| with admin rights,
391 This command can only be run using an |authtoken| with admin rights,
387 or users with at least read rights to |repos|.
392 or users with at least read rights to |repos|.
388
393
389 :param apiuser: This is filled automatically from the |authtoken|.
394 :param apiuser: This is filled automatically from the |authtoken|.
390 :type apiuser: AuthUser
395 :type apiuser: AuthUser
391 :param repoid: The repository name or repository ID.
396 :param repoid: The repository name or repository ID.
392 :type repoid: str or int
397 :type repoid: str or int
393 :param start_rev: The starting revision from where to get changesets.
398 :param start_rev: The starting revision from where to get changesets.
394 :type start_rev: str
399 :type start_rev: str
395 :param limit: Limit the number of commits to this amount
400 :param limit: Limit the number of commits to this amount
396 :type limit: str or int
401 :type limit: str or int
397 :param details: Set the level of detail returned. Valid option are:
402 :param details: Set the level of detail returned. Valid option are:
398 ``basic``, ``extended`` and ``full``.
403 ``basic``, ``extended`` and ``full``.
399 :type details: Optional(str)
404 :type details: Optional(str)
400
405
401 .. note::
406 .. note::
402
407
403 Setting the parameter `details` to the value ``full`` is extensive
408 Setting the parameter `details` to the value ``full`` is extensive
404 and returns details like the diff itself, and the number
409 and returns details like the diff itself, and the number
405 of changed files.
410 of changed files.
406
411
407
412
408 get_repo_nodes
413 get_repo_nodes
409 --------------
414 --------------
410
415
411 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
416 .. py:function:: get_repo_nodes(apiuser, repoid, revision, root_path, ret_type=<Optional:'all'>, details=<Optional:'basic'>, max_file_bytes=<Optional:None>)
412
417
413 Returns a list of nodes and children in a flat list for a given
418 Returns a list of nodes and children in a flat list for a given
414 path at given revision.
419 path at given revision.
415
420
416 It's possible to specify ret_type to show only `files` or `dirs`.
421 It's possible to specify ret_type to show only `files` or `dirs`.
417
422
418 This command can only be run using an |authtoken| with admin rights,
423 This command can only be run using an |authtoken| with admin rights,
419 or users with at least read rights to |repos|.
424 or users with at least read rights to |repos|.
420
425
421 :param apiuser: This is filled automatically from the |authtoken|.
426 :param apiuser: This is filled automatically from the |authtoken|.
422 :type apiuser: AuthUser
427 :type apiuser: AuthUser
423 :param repoid: The repository name or repository ID.
428 :param repoid: The repository name or repository ID.
424 :type repoid: str or int
429 :type repoid: str or int
425 :param revision: The revision for which listing should be done.
430 :param revision: The revision for which listing should be done.
426 :type revision: str
431 :type revision: str
427 :param root_path: The path from which to start displaying.
432 :param root_path: The path from which to start displaying.
428 :type root_path: str
433 :type root_path: str
429 :param ret_type: Set the return type. Valid options are
434 :param ret_type: Set the return type. Valid options are
430 ``all`` (default), ``files`` and ``dirs``.
435 ``all`` (default), ``files`` and ``dirs``.
431 :type ret_type: Optional(str)
436 :type ret_type: Optional(str)
432 :param details: Returns extended information about nodes, such as
437 :param details: Returns extended information about nodes, such as
433 md5, binary, and or content. The valid options are ``basic`` and
438 md5, binary, and or content. The valid options are ``basic`` and
434 ``full``.
439 ``full``.
435 :type details: Optional(str)
440 :type details: Optional(str)
436 :param max_file_bytes: Only return file content under this file size bytes
441 :param max_file_bytes: Only return file content under this file size bytes
437 :type details: Optional(int)
442 :type details: Optional(int)
438
443
439 Example output:
444 Example output:
440
445
441 .. code-block:: bash
446 .. code-block:: bash
442
447
443 id : <id_given_in_input>
448 id : <id_given_in_input>
444 result: [
449 result: [
445 {
450 {
446 "name" : "<name>"
451 "name" : "<name>"
447 "type" : "<type>",
452 "type" : "<type>",
448 "binary": "<true|false>" (only in extended mode)
453 "binary": "<true|false>" (only in extended mode)
449 "md5" : "<md5 of file content>" (only in extended mode)
454 "md5" : "<md5 of file content>" (only in extended mode)
450 },
455 },
451 ...
456 ...
452 ]
457 ]
453 error: null
458 error: null
454
459
455
460
456 get_repo_refs
461 get_repo_refs
457 -------------
462 -------------
458
463
459 .. py:function:: get_repo_refs(apiuser, repoid)
464 .. py:function:: get_repo_refs(apiuser, repoid)
460
465
461 Returns a dictionary of current references. It returns
466 Returns a dictionary of current references. It returns
462 bookmarks, branches, closed_branches, and tags for given repository
467 bookmarks, branches, closed_branches, and tags for given repository
463
468
464 It's possible to specify ret_type to show only `files` or `dirs`.
469 It's possible to specify ret_type to show only `files` or `dirs`.
465
470
466 This command can only be run using an |authtoken| with admin rights,
471 This command can only be run using an |authtoken| with admin rights,
467 or users with at least read rights to |repos|.
472 or users with at least read rights to |repos|.
468
473
469 :param apiuser: This is filled automatically from the |authtoken|.
474 :param apiuser: This is filled automatically from the |authtoken|.
470 :type apiuser: AuthUser
475 :type apiuser: AuthUser
471 :param repoid: The repository name or repository ID.
476 :param repoid: The repository name or repository ID.
472 :type repoid: str or int
477 :type repoid: str or int
473
478
474 Example output:
479 Example output:
475
480
476 .. code-block:: bash
481 .. code-block:: bash
477
482
478 id : <id_given_in_input>
483 id : <id_given_in_input>
479 result: [
484 result: [
480 TODO...
485 TODO...
481 ]
486 ]
482 error: null
487 error: null
483
488
484
489
485 get_repo_settings
490 get_repo_settings
486 -----------------
491 -----------------
487
492
488 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
493 .. py:function:: get_repo_settings(apiuser, repoid, key=<Optional:None>)
489
494
490 Returns all settings for a repository. If key is given it only returns the
495 Returns all settings for a repository. If key is given it only returns the
491 setting identified by the key or null.
496 setting identified by the key or null.
492
497
493 :param apiuser: This is filled automatically from the |authtoken|.
498 :param apiuser: This is filled automatically from the |authtoken|.
494 :type apiuser: AuthUser
499 :type apiuser: AuthUser
495 :param repoid: The repository name or repository id.
500 :param repoid: The repository name or repository id.
496 :type repoid: str or int
501 :type repoid: str or int
497 :param key: Key of the setting to return.
502 :param key: Key of the setting to return.
498 :type: key: Optional(str)
503 :type: key: Optional(str)
499
504
500 Example output:
505 Example output:
501
506
502 .. code-block:: bash
507 .. code-block:: bash
503
508
504 {
509 {
505 "error": null,
510 "error": null,
506 "id": 237,
511 "id": 237,
507 "result": {
512 "result": {
508 "extensions_largefiles": true,
513 "extensions_largefiles": true,
509 "hooks_changegroup_push_logger": true,
514 "hooks_changegroup_push_logger": true,
510 "hooks_changegroup_repo_size": false,
515 "hooks_changegroup_repo_size": false,
511 "hooks_outgoing_pull_logger": true,
516 "hooks_outgoing_pull_logger": true,
512 "phases_publish": "True",
517 "phases_publish": "True",
513 "rhodecode_hg_use_rebase_for_merging": true,
518 "rhodecode_hg_use_rebase_for_merging": true,
514 "rhodecode_pr_merge_enabled": true,
519 "rhodecode_pr_merge_enabled": true,
515 "rhodecode_use_outdated_comments": true
520 "rhodecode_use_outdated_comments": true
516 }
521 }
517 }
522 }
518
523
519
524
520 get_repos
525 get_repos
521 ---------
526 ---------
522
527
523 .. py:function:: get_repos(apiuser)
528 .. py:function:: get_repos(apiuser)
524
529
525 Lists all existing repositories.
530 Lists all existing repositories.
526
531
527 This command can only be run using an |authtoken| with admin rights,
532 This command can only be run using an |authtoken| with admin rights,
528 or users with at least read rights to |repos|.
533 or users with at least read rights to |repos|.
529
534
530 :param apiuser: This is filled automatically from the |authtoken|.
535 :param apiuser: This is filled automatically from the |authtoken|.
531 :type apiuser: AuthUser
536 :type apiuser: AuthUser
532
537
533 Example output:
538 Example output:
534
539
535 .. code-block:: bash
540 .. code-block:: bash
536
541
537 id : <id_given_in_input>
542 id : <id_given_in_input>
538 result: [
543 result: [
539 {
544 {
540 "repo_id" : "<repo_id>",
545 "repo_id" : "<repo_id>",
541 "repo_name" : "<reponame>"
546 "repo_name" : "<reponame>"
542 "repo_type" : "<repo_type>",
547 "repo_type" : "<repo_type>",
543 "clone_uri" : "<clone_uri>",
548 "clone_uri" : "<clone_uri>",
544 "private": : "<bool>",
549 "private": : "<bool>",
545 "created_on" : "<datetimecreated>",
550 "created_on" : "<datetimecreated>",
546 "description" : "<description>",
551 "description" : "<description>",
547 "landing_rev": "<landing_rev>",
552 "landing_rev": "<landing_rev>",
548 "owner": "<repo_owner>",
553 "owner": "<repo_owner>",
549 "fork_of": "<name_of_fork_parent>",
554 "fork_of": "<name_of_fork_parent>",
550 "enable_downloads": "<bool>",
555 "enable_downloads": "<bool>",
551 "enable_locking": "<bool>",
556 "enable_locking": "<bool>",
552 "enable_statistics": "<bool>",
557 "enable_statistics": "<bool>",
553 },
558 },
554 ...
559 ...
555 ]
560 ]
556 error: null
561 error: null
557
562
558
563
559 grant_user_group_permission
564 grant_user_group_permission
560 ---------------------------
565 ---------------------------
561
566
562 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
567 .. py:function:: grant_user_group_permission(apiuser, repoid, usergroupid, perm)
563
568
564 Grant permission for a user group on the specified repository,
569 Grant permission for a user group on the specified repository,
565 or update existing permissions.
570 or update existing permissions.
566
571
567 This command can only be run using an |authtoken| with admin
572 This command can only be run using an |authtoken| with admin
568 permissions on the |repo|.
573 permissions on the |repo|.
569
574
570 :param apiuser: This is filled automatically from the |authtoken|.
575 :param apiuser: This is filled automatically from the |authtoken|.
571 :type apiuser: AuthUser
576 :type apiuser: AuthUser
572 :param repoid: Set the repository name or repository ID.
577 :param repoid: Set the repository name or repository ID.
573 :type repoid: str or int
578 :type repoid: str or int
574 :param usergroupid: Specify the ID of the user group.
579 :param usergroupid: Specify the ID of the user group.
575 :type usergroupid: str or int
580 :type usergroupid: str or int
576 :param perm: Set the user group permissions using the following
581 :param perm: Set the user group permissions using the following
577 format: (repository.(none|read|write|admin))
582 format: (repository.(none|read|write|admin))
578 :type perm: str
583 :type perm: str
579
584
580 Example output:
585 Example output:
581
586
582 .. code-block:: bash
587 .. code-block:: bash
583
588
584 id : <id_given_in_input>
589 id : <id_given_in_input>
585 result : {
590 result : {
586 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
591 "msg" : "Granted perm: `<perm>` for group: `<usersgroupname>` in repo: `<reponame>`",
587 "success": true
592 "success": true
588
593
589 }
594 }
590 error : null
595 error : null
591
596
592 Example error output:
597 Example error output:
593
598
594 .. code-block:: bash
599 .. code-block:: bash
595
600
596 id : <id_given_in_input>
601 id : <id_given_in_input>
597 result : null
602 result : null
598 error : {
603 error : {
599 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
604 "failed to edit permission for user group: `<usergroup>` in repo `<repo>`'
600 }
605 }
601
606
602
607
603 grant_user_permission
608 grant_user_permission
604 ---------------------
609 ---------------------
605
610
606 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
611 .. py:function:: grant_user_permission(apiuser, repoid, userid, perm)
607
612
608 Grant permissions for the specified user on the given repository,
613 Grant permissions for the specified user on the given repository,
609 or update existing permissions if found.
614 or update existing permissions if found.
610
615
611 This command can only be run using an |authtoken| with admin
616 This command can only be run using an |authtoken| with admin
612 permissions on the |repo|.
617 permissions on the |repo|.
613
618
614 :param apiuser: This is filled automatically from the |authtoken|.
619 :param apiuser: This is filled automatically from the |authtoken|.
615 :type apiuser: AuthUser
620 :type apiuser: AuthUser
616 :param repoid: Set the repository name or repository ID.
621 :param repoid: Set the repository name or repository ID.
617 :type repoid: str or int
622 :type repoid: str or int
618 :param userid: Set the user name.
623 :param userid: Set the user name.
619 :type userid: str
624 :type userid: str
620 :param perm: Set the user permissions, using the following format
625 :param perm: Set the user permissions, using the following format
621 ``(repository.(none|read|write|admin))``
626 ``(repository.(none|read|write|admin))``
622 :type perm: str
627 :type perm: str
623
628
624 Example output:
629 Example output:
625
630
626 .. code-block:: bash
631 .. code-block:: bash
627
632
628 id : <id_given_in_input>
633 id : <id_given_in_input>
629 result: {
634 result: {
630 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
635 "msg" : "Granted perm: `<perm>` for user: `<username>` in repo: `<reponame>`",
631 "success": true
636 "success": true
632 }
637 }
633 error: null
638 error: null
634
639
635
640
636 invalidate_cache
641 invalidate_cache
637 ----------------
642 ----------------
638
643
639 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
644 .. py:function:: invalidate_cache(apiuser, repoid, delete_keys=<Optional:False>)
640
645
641 Invalidates the cache for the specified repository.
646 Invalidates the cache for the specified repository.
642
647
643 This command can only be run using an |authtoken| with admin rights to
648 This command can only be run using an |authtoken| with admin rights to
644 the specified repository.
649 the specified repository.
645
650
646 This command takes the following options:
651 This command takes the following options:
647
652
648 :param apiuser: This is filled automatically from |authtoken|.
653 :param apiuser: This is filled automatically from |authtoken|.
649 :type apiuser: AuthUser
654 :type apiuser: AuthUser
650 :param repoid: Sets the repository name or repository ID.
655 :param repoid: Sets the repository name or repository ID.
651 :type repoid: str or int
656 :type repoid: str or int
652 :param delete_keys: This deletes the invalidated keys instead of
657 :param delete_keys: This deletes the invalidated keys instead of
653 just flagging them.
658 just flagging them.
654 :type delete_keys: Optional(``True`` | ``False``)
659 :type delete_keys: Optional(``True`` | ``False``)
655
660
656 Example output:
661 Example output:
657
662
658 .. code-block:: bash
663 .. code-block:: bash
659
664
660 id : <id_given_in_input>
665 id : <id_given_in_input>
661 result : {
666 result : {
662 'msg': Cache for repository `<repository name>` was invalidated,
667 'msg': Cache for repository `<repository name>` was invalidated,
663 'repository': <repository name>
668 'repository': <repository name>
664 }
669 }
665 error : null
670 error : null
666
671
667 Example error output:
672 Example error output:
668
673
669 .. code-block:: bash
674 .. code-block:: bash
670
675
671 id : <id_given_in_input>
676 id : <id_given_in_input>
672 result : null
677 result : null
673 error : {
678 error : {
674 'Error occurred during cache invalidation action'
679 'Error occurred during cache invalidation action'
675 }
680 }
676
681
677
682
678 lock
683 lock
679 ----
684 ----
680
685
681 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
686 .. py:function:: lock(apiuser, repoid, locked=<Optional:None>, userid=<Optional:<OptionalAttr:apiuser>>)
682
687
683 Sets the lock state of the specified |repo| by the given user.
688 Sets the lock state of the specified |repo| by the given user.
684 From more information, see :ref:`repo-locking`.
689 From more information, see :ref:`repo-locking`.
685
690
686 * If the ``userid`` option is not set, the repository is locked to the
691 * If the ``userid`` option is not set, the repository is locked to the
687 user who called the method.
692 user who called the method.
688 * If the ``locked`` parameter is not set, the current lock state of the
693 * If the ``locked`` parameter is not set, the current lock state of the
689 repository is displayed.
694 repository is displayed.
690
695
691 This command can only be run using an |authtoken| with admin rights to
696 This command can only be run using an |authtoken| with admin rights to
692 the specified repository.
697 the specified repository.
693
698
694 This command takes the following options:
699 This command takes the following options:
695
700
696 :param apiuser: This is filled automatically from the |authtoken|.
701 :param apiuser: This is filled automatically from the |authtoken|.
697 :type apiuser: AuthUser
702 :type apiuser: AuthUser
698 :param repoid: Sets the repository name or repository ID.
703 :param repoid: Sets the repository name or repository ID.
699 :type repoid: str or int
704 :type repoid: str or int
700 :param locked: Sets the lock state.
705 :param locked: Sets the lock state.
701 :type locked: Optional(``True`` | ``False``)
706 :type locked: Optional(``True`` | ``False``)
702 :param userid: Set the repository lock to this user.
707 :param userid: Set the repository lock to this user.
703 :type userid: Optional(str or int)
708 :type userid: Optional(str or int)
704
709
705 Example error output:
710 Example error output:
706
711
707 .. code-block:: bash
712 .. code-block:: bash
708
713
709 id : <id_given_in_input>
714 id : <id_given_in_input>
710 result : {
715 result : {
711 'repo': '<reponame>',
716 'repo': '<reponame>',
712 'locked': <bool: lock state>,
717 'locked': <bool: lock state>,
713 'locked_since': <int: lock timestamp>,
718 'locked_since': <int: lock timestamp>,
714 'locked_by': <username of person who made the lock>,
719 'locked_by': <username of person who made the lock>,
715 'lock_reason': <str: reason for locking>,
720 'lock_reason': <str: reason for locking>,
716 'lock_state_changed': <bool: True if lock state has been changed in this request>,
721 'lock_state_changed': <bool: True if lock state has been changed in this request>,
717 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
722 'msg': 'Repo `<reponame>` locked by `<username>` on <timestamp>.'
718 or
723 or
719 'msg': 'Repo `<repository name>` not locked.'
724 'msg': 'Repo `<repository name>` not locked.'
720 or
725 or
721 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
726 'msg': 'User `<user name>` set lock state for repo `<repository name>` to `<new lock state>`'
722 }
727 }
723 error : null
728 error : null
724
729
725 Example error output:
730 Example error output:
726
731
727 .. code-block:: bash
732 .. code-block:: bash
728
733
729 id : <id_given_in_input>
734 id : <id_given_in_input>
730 result : null
735 result : null
731 error : {
736 error : {
732 'Error occurred locking repository `<reponame>`
737 'Error occurred locking repository `<reponame>`'
733 }
738 }
734
739
735
740
736 pull
741 pull
737 ----
742 ----
738
743
739 .. py:function:: pull(apiuser, repoid)
744 .. py:function:: pull(apiuser, repoid)
740
745
741 Triggers a pull on the given repository from a remote location. You
746 Triggers a pull on the given repository from a remote location. You
742 can use this to keep remote repositories up-to-date.
747 can use this to keep remote repositories up-to-date.
743
748
744 This command can only be run using an |authtoken| with admin
749 This command can only be run using an |authtoken| with admin
745 rights to the specified repository. For more information,
750 rights to the specified repository. For more information,
746 see :ref:`config-token-ref`.
751 see :ref:`config-token-ref`.
747
752
748 This command takes the following options:
753 This command takes the following options:
749
754
750 :param apiuser: This is filled automatically from the |authtoken|.
755 :param apiuser: This is filled automatically from the |authtoken|.
751 :type apiuser: AuthUser
756 :type apiuser: AuthUser
752 :param repoid: The repository name or repository ID.
757 :param repoid: The repository name or repository ID.
753 :type repoid: str or int
758 :type repoid: str or int
754
759
755 Example output:
760 Example output:
756
761
757 .. code-block:: bash
762 .. code-block:: bash
758
763
759 id : <id_given_in_input>
764 id : <id_given_in_input>
760 result : {
765 result : {
761 "msg": "Pulled from `<repository name>`"
766 "msg": "Pulled from `<repository name>`"
762 "repository": "<repository name>"
767 "repository": "<repository name>"
763 }
768 }
764 error : null
769 error : null
765
770
766 Example error output:
771 Example error output:
767
772
768 .. code-block:: bash
773 .. code-block:: bash
769
774
770 id : <id_given_in_input>
775 id : <id_given_in_input>
771 result : null
776 result : null
772 error : {
777 error : {
773 "Unable to pull changes from `<reponame>`"
778 "Unable to pull changes from `<reponame>`"
774 }
779 }
775
780
776
781
777 remove_field_from_repo
782 remove_field_from_repo
778 ----------------------
783 ----------------------
779
784
780 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
785 .. py:function:: remove_field_from_repo(apiuser, repoid, key)
781
786
782 Removes an extra field from a repository.
787 Removes an extra field from a repository.
783
788
784 This command can only be run using an |authtoken| with at least
789 This command can only be run using an |authtoken| with at least
785 write permissions to the |repo|.
790 write permissions to the |repo|.
786
791
787 :param apiuser: This is filled automatically from the |authtoken|.
792 :param apiuser: This is filled automatically from the |authtoken|.
788 :type apiuser: AuthUser
793 :type apiuser: AuthUser
789 :param repoid: Set the repository name or repository ID.
794 :param repoid: Set the repository name or repository ID.
790 :type repoid: str or int
795 :type repoid: str or int
791 :param key: Set the unique field key for this repository.
796 :param key: Set the unique field key for this repository.
792 :type key: str
797 :type key: str
793
798
794
799
795 revoke_user_group_permission
800 revoke_user_group_permission
796 ----------------------------
801 ----------------------------
797
802
798 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
803 .. py:function:: revoke_user_group_permission(apiuser, repoid, usergroupid)
799
804
800 Revoke the permissions of a user group on a given repository.
805 Revoke the permissions of a user group on a given repository.
801
806
802 This command can only be run using an |authtoken| with admin
807 This command can only be run using an |authtoken| with admin
803 permissions on the |repo|.
808 permissions on the |repo|.
804
809
805 :param apiuser: This is filled automatically from the |authtoken|.
810 :param apiuser: This is filled automatically from the |authtoken|.
806 :type apiuser: AuthUser
811 :type apiuser: AuthUser
807 :param repoid: Set the repository name or repository ID.
812 :param repoid: Set the repository name or repository ID.
808 :type repoid: str or int
813 :type repoid: str or int
809 :param usergroupid: Specify the user group ID.
814 :param usergroupid: Specify the user group ID.
810 :type usergroupid: str or int
815 :type usergroupid: str or int
811
816
812 Example output:
817 Example output:
813
818
814 .. code-block:: bash
819 .. code-block:: bash
815
820
816 id : <id_given_in_input>
821 id : <id_given_in_input>
817 result: {
822 result: {
818 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
823 "msg" : "Revoked perm for group: `<usersgroupname>` in repo: `<reponame>`",
819 "success": true
824 "success": true
820 }
825 }
821 error: null
826 error: null
822
827
823
828
824 revoke_user_permission
829 revoke_user_permission
825 ----------------------
830 ----------------------
826
831
827 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
832 .. py:function:: revoke_user_permission(apiuser, repoid, userid)
828
833
829 Revoke permission for a user on the specified repository.
834 Revoke permission for a user on the specified repository.
830
835
831 This command can only be run using an |authtoken| with admin
836 This command can only be run using an |authtoken| with admin
832 permissions on the |repo|.
837 permissions on the |repo|.
833
838
834 :param apiuser: This is filled automatically from the |authtoken|.
839 :param apiuser: This is filled automatically from the |authtoken|.
835 :type apiuser: AuthUser
840 :type apiuser: AuthUser
836 :param repoid: Set the repository name or repository ID.
841 :param repoid: Set the repository name or repository ID.
837 :type repoid: str or int
842 :type repoid: str or int
838 :param userid: Set the user name of revoked user.
843 :param userid: Set the user name of revoked user.
839 :type userid: str or int
844 :type userid: str or int
840
845
841 Example error output:
846 Example error output:
842
847
843 .. code-block:: bash
848 .. code-block:: bash
844
849
845 id : <id_given_in_input>
850 id : <id_given_in_input>
846 result: {
851 result: {
847 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
852 "msg" : "Revoked perm for user: `<username>` in repo: `<reponame>`",
848 "success": true
853 "success": true
849 }
854 }
850 error: null
855 error: null
851
856
852
857
853 set_repo_settings
858 set_repo_settings
854 -----------------
859 -----------------
855
860
856 .. py:function:: set_repo_settings(apiuser, repoid, settings)
861 .. py:function:: set_repo_settings(apiuser, repoid, settings)
857
862
858 Update repository settings. Returns true on success.
863 Update repository settings. Returns true on success.
859
864
860 :param apiuser: This is filled automatically from the |authtoken|.
865 :param apiuser: This is filled automatically from the |authtoken|.
861 :type apiuser: AuthUser
866 :type apiuser: AuthUser
862 :param repoid: The repository name or repository id.
867 :param repoid: The repository name or repository id.
863 :type repoid: str or int
868 :type repoid: str or int
864 :param settings: The new settings for the repository.
869 :param settings: The new settings for the repository.
865 :type: settings: dict
870 :type: settings: dict
866
871
867 Example output:
872 Example output:
868
873
869 .. code-block:: bash
874 .. code-block:: bash
870
875
871 {
876 {
872 "error": null,
877 "error": null,
873 "id": 237,
878 "id": 237,
874 "result": true
879 "result": true
875 }
880 }
876
881
877
882
878 strip
883 strip
879 -----
884 -----
880
885
881 .. py:function:: strip(apiuser, repoid, revision, branch)
886 .. py:function:: strip(apiuser, repoid, revision, branch)
882
887
883 Strips the given revision from the specified repository.
888 Strips the given revision from the specified repository.
884
889
885 * This will remove the revision and all of its decendants.
890 * This will remove the revision and all of its decendants.
886
891
887 This command can only be run using an |authtoken| with admin rights to
892 This command can only be run using an |authtoken| with admin rights to
888 the specified repository.
893 the specified repository.
889
894
890 This command takes the following options:
895 This command takes the following options:
891
896
892 :param apiuser: This is filled automatically from the |authtoken|.
897 :param apiuser: This is filled automatically from the |authtoken|.
893 :type apiuser: AuthUser
898 :type apiuser: AuthUser
894 :param repoid: The repository name or repository ID.
899 :param repoid: The repository name or repository ID.
895 :type repoid: str or int
900 :type repoid: str or int
896 :param revision: The revision you wish to strip.
901 :param revision: The revision you wish to strip.
897 :type revision: str
902 :type revision: str
898 :param branch: The branch from which to strip the revision.
903 :param branch: The branch from which to strip the revision.
899 :type branch: str
904 :type branch: str
900
905
901 Example output:
906 Example output:
902
907
903 .. code-block:: bash
908 .. code-block:: bash
904
909
905 id : <id_given_in_input>
910 id : <id_given_in_input>
906 result : {
911 result : {
907 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
912 "msg": "'Stripped commit <commit_hash> from repo `<repository name>`'"
908 "repository": "<repository name>"
913 "repository": "<repository name>"
909 }
914 }
910 error : null
915 error : null
911
916
912 Example error output:
917 Example error output:
913
918
914 .. code-block:: bash
919 .. code-block:: bash
915
920
916 id : <id_given_in_input>
921 id : <id_given_in_input>
917 result : null
922 result : null
918 error : {
923 error : {
919 "Unable to strip commit <commit_hash> from repo `<repository name>`"
924 "Unable to strip commit <commit_hash> from repo `<repository name>`"
920 }
925 }
921
926
922
927
923 update_repo
928 update_repo
924 -----------
929 -----------
925
930
926 .. py:function:: update_repo(apiuser, repoid, name=<Optional:None>, owner=<Optional:<OptionalAttr:apiuser>>, group=<Optional:None>, fork_of=<Optional:None>, 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>, fields=<Optional:''>)
931 .. 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:''>)
927
932
928 Updates a repository with the given information.
933 Updates a repository with the given information.
929
934
930 This command can only be run using an |authtoken| with at least
935 This command can only be run using an |authtoken| with at least
931 write permissions to the |repo|.
936 admin permissions to the |repo|.
937
938 * If the repository name contains "/", repository will be updated
939 accordingly with a repository group or nested repository groups
940
941 For example repoid=repo-test name="foo/bar/repo-test" will update |repo|
942 called "repo-test" and place it inside group "foo/bar".
943 You have to have permissions to access and write to the last repository
944 group ("bar" in this example)
932
945
933 :param apiuser: This is filled automatically from the |authtoken|.
946 :param apiuser: This is filled automatically from the |authtoken|.
934 :type apiuser: AuthUser
947 :type apiuser: AuthUser
935 :param repoid: repository name or repository ID.
948 :param repoid: repository name or repository ID.
936 :type repoid: str or int
949 :type repoid: str or int
937 :param name: Update the |repo| name.
950 :param repo_name: Update the |repo| name, including the
938 :type name: str
951 repository group it's in.
952 :type repo_name: str
939 :param owner: Set the |repo| owner.
953 :param owner: Set the |repo| owner.
940 :type owner: str
954 :type owner: str
941 :param group: Set the |repo| group the |repo| belongs to.
955 :param fork_of: Set the |repo| as fork of another |repo|.
942 :type group: str
943 :param fork_of: Set the master |repo| name.
944 :type fork_of: str
956 :type fork_of: str
945 :param description: Update the |repo| description.
957 :param description: Update the |repo| description.
946 :type description: str
958 :type description: str
947 :param private: Set the |repo| as private. (True | False)
959 :param private: Set the |repo| as private. (True | False)
948 :type private: bool
960 :type private: bool
949 :param clone_uri: Update the |repo| clone URI.
961 :param clone_uri: Update the |repo| clone URI.
950 :type clone_uri: str
962 :type clone_uri: str
951 :param landing_rev: Set the |repo| landing revision. Default is
963 :param landing_rev: Set the |repo| landing revision. Default is ``rev:tip``.
952 ``tip``.
953 :type landing_rev: str
964 :type landing_rev: str
954 :param enable_statistics: Enable statistics on the |repo|,
965 :param enable_statistics: Enable statistics on the |repo|, (True | False).
955 (True | False).
956 :type enable_statistics: bool
966 :type enable_statistics: bool
957 :param enable_locking: Enable |repo| locking.
967 :param enable_locking: Enable |repo| locking.
958 :type enable_locking: bool
968 :type enable_locking: bool
959 :param enable_downloads: Enable downloads from the |repo|,
969 :param enable_downloads: Enable downloads from the |repo|, (True | False).
960 (True | False).
961 :type enable_downloads: bool
970 :type enable_downloads: bool
962 :param fields: Add extra fields to the |repo|. Use the following
971 :param fields: Add extra fields to the |repo|. Use the following
963 example format: ``field_key=field_val,field_key2=fieldval2``.
972 example format: ``field_key=field_val,field_key2=fieldval2``.
964 Escape ', ' with \,
973 Escape ', ' with \,
965 :type fields: str
974 :type fields: str
966
975
967
976
@@ -1,115 +1,115 b''
1 .. _server-methods-ref:
1 .. _server-methods-ref:
2
2
3 server methods
3 server methods
4 =================
4 ==============
5
5
6 get_ip
6 get_ip
7 ------
7 ------
8
8
9 .. py:function:: get_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
9 .. py:function:: get_ip(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
10
10
11 Displays the IP Address as seen from the |RCE| server.
11 Displays the IP Address as seen from the |RCE| server.
12
12
13 * This command displays the IP Address, as well as all the defined IP
13 * This command displays the IP Address, as well as all the defined IP
14 addresses for the specified user. If the ``userid`` is not set, the
14 addresses for the specified user. If the ``userid`` is not set, the
15 data returned is for the user calling the method.
15 data returned is for the user calling the method.
16
16
17 This command can only be run using an |authtoken| with admin rights to
17 This command can only be run using an |authtoken| with admin rights to
18 the specified repository.
18 the specified repository.
19
19
20 This command takes the following options:
20 This command takes the following options:
21
21
22 :param apiuser: This is filled automatically from |authtoken|.
22 :param apiuser: This is filled automatically from |authtoken|.
23 :type apiuser: AuthUser
23 :type apiuser: AuthUser
24 :param userid: Sets the userid for which associated IP Address data
24 :param userid: Sets the userid for which associated IP Address data
25 is returned.
25 is returned.
26 :type userid: Optional(str or int)
26 :type userid: Optional(str or int)
27
27
28 Example output:
28 Example output:
29
29
30 .. code-block:: bash
30 .. code-block:: bash
31
31
32 id : <id_given_in_input>
32 id : <id_given_in_input>
33 result : {
33 result : {
34 "server_ip_addr": "<ip_from_clien>",
34 "server_ip_addr": "<ip_from_clien>",
35 "user_ips": [
35 "user_ips": [
36 {
36 {
37 "ip_addr": "<ip_with_mask>",
37 "ip_addr": "<ip_with_mask>",
38 "ip_range": ["<start_ip>", "<end_ip>"],
38 "ip_range": ["<start_ip>", "<end_ip>"],
39 },
39 },
40 ...
40 ...
41 ]
41 ]
42 }
42 }
43
43
44
44
45 get_server_info
45 get_server_info
46 ---------------
46 ---------------
47
47
48 .. py:function:: get_server_info(apiuser)
48 .. py:function:: get_server_info(apiuser)
49
49
50 Returns the |RCE| server information.
50 Returns the |RCE| server information.
51
51
52 This includes the running version of |RCE| and all installed
52 This includes the running version of |RCE| and all installed
53 packages. This command takes the following options:
53 packages. This command takes the following options:
54
54
55 :param apiuser: This is filled automatically from the |authtoken|.
55 :param apiuser: This is filled automatically from the |authtoken|.
56 :type apiuser: AuthUser
56 :type apiuser: AuthUser
57
57
58 Example output:
58 Example output:
59
59
60 .. code-block:: bash
60 .. code-block:: bash
61
61
62 id : <id_given_in_input>
62 id : <id_given_in_input>
63 result : {
63 result : {
64 'modules': [<module name>,...]
64 'modules': [<module name>,...]
65 'py_version': <python version>,
65 'py_version': <python version>,
66 'platform': <platform type>,
66 'platform': <platform type>,
67 'rhodecode_version': <rhodecode version>
67 'rhodecode_version': <rhodecode version>
68 }
68 }
69 error : null
69 error : null
70
70
71
71
72 rescan_repos
72 rescan_repos
73 ------------
73 ------------
74
74
75 .. py:function:: rescan_repos(apiuser, remove_obsolete=<Optional:False>)
75 .. py:function:: rescan_repos(apiuser, remove_obsolete=<Optional:False>)
76
76
77 Triggers a rescan of the specified repositories.
77 Triggers a rescan of the specified repositories.
78
78
79 * If the ``remove_obsolete`` option is set, it also deletes repositories
79 * If the ``remove_obsolete`` option is set, it also deletes repositories
80 that are found in the database but not on the file system, so called
80 that are found in the database but not on the file system, so called
81 "clean zombies".
81 "clean zombies".
82
82
83 This command can only be run using an |authtoken| with admin rights to
83 This command can only be run using an |authtoken| with admin rights to
84 the specified repository.
84 the specified repository.
85
85
86 This command takes the following options:
86 This command takes the following options:
87
87
88 :param apiuser: This is filled automatically from the |authtoken|.
88 :param apiuser: This is filled automatically from the |authtoken|.
89 :type apiuser: AuthUser
89 :type apiuser: AuthUser
90 :param remove_obsolete: Deletes repositories from the database that
90 :param remove_obsolete: Deletes repositories from the database that
91 are not found on the filesystem.
91 are not found on the filesystem.
92 :type remove_obsolete: Optional(``True`` | ``False``)
92 :type remove_obsolete: Optional(``True`` | ``False``)
93
93
94 Example output:
94 Example output:
95
95
96 .. code-block:: bash
96 .. code-block:: bash
97
97
98 id : <id_given_in_input>
98 id : <id_given_in_input>
99 result : {
99 result : {
100 'added': [<added repository name>,...]
100 'added': [<added repository name>,...]
101 'removed': [<removed repository name>,...]
101 'removed': [<removed repository name>,...]
102 }
102 }
103 error : null
103 error : null
104
104
105 Example error output:
105 Example error output:
106
106
107 .. code-block:: bash
107 .. code-block:: bash
108
108
109 id : <id_given_in_input>
109 id : <id_given_in_input>
110 result : null
110 result : null
111 error : {
111 error : {
112 'Error occurred during rescan repositories action'
112 'Error occurred during rescan repositories action'
113 }
113 }
114
114
115
115
@@ -1,406 +1,406 b''
1 .. _user-group-methods-ref:
1 .. _user-group-methods-ref:
2
2
3 user_group methods
3 user_group methods
4 =================
4 ==================
5
5
6 add_user_to_user_group
6 add_user_to_user_group
7 ----------------------
7 ----------------------
8
8
9 .. py:function:: add_user_to_user_group(apiuser, usergroupid, userid)
9 .. py:function:: add_user_to_user_group(apiuser, usergroupid, userid)
10
10
11 Adds a user to a `user group`. If the user already exists in the group
11 Adds a user to a `user group`. If the user already exists in the group
12 this command will return false.
12 this command will return false.
13
13
14 This command can only be run using an |authtoken| with admin rights to
14 This command can only be run using an |authtoken| with admin rights to
15 the specified user group.
15 the specified user group.
16
16
17 This command takes the following options:
17 This command takes the following options:
18
18
19 :param apiuser: This is filled automatically from the |authtoken|.
19 :param apiuser: This is filled automatically from the |authtoken|.
20 :type apiuser: AuthUser
20 :type apiuser: AuthUser
21 :param usergroupid: Set the name of the `user group` to which a
21 :param usergroupid: Set the name of the `user group` to which a
22 user will be added.
22 user will be added.
23 :type usergroupid: int
23 :type usergroupid: int
24 :param userid: Set the `user_id` of the user to add to the group.
24 :param userid: Set the `user_id` of the user to add to the group.
25 :type userid: int
25 :type userid: int
26
26
27 Example output:
27 Example output:
28
28
29 .. code-block:: bash
29 .. code-block:: bash
30
30
31 id : <id_given_in_input>
31 id : <id_given_in_input>
32 result : {
32 result : {
33 "success": True|False # depends on if member is in group
33 "success": True|False # depends on if member is in group
34 "msg": "added member `<username>` to user group `<groupname>` |
34 "msg": "added member `<username>` to user group `<groupname>` |
35 User is already in that group"
35 User is already in that group"
36
36
37 }
37 }
38 error : null
38 error : null
39
39
40 Example error output:
40 Example error output:
41
41
42 .. code-block:: bash
42 .. code-block:: bash
43
43
44 id : <id_given_in_input>
44 id : <id_given_in_input>
45 result : null
45 result : null
46 error : {
46 error : {
47 "failed to add member to user group `<user_group_name>`"
47 "failed to add member to user group `<user_group_name>`"
48 }
48 }
49
49
50
50
51 create_user_group
51 create_user_group
52 -----------------
52 -----------------
53
53
54 .. py:function:: create_user_group(apiuser, group_name, description=<Optional:''>, owner=<Optional:<OptionalAttr:apiuser>>, active=<Optional:True>)
54 .. py:function:: create_user_group(apiuser, group_name, description=<Optional:''>, owner=<Optional:<OptionalAttr:apiuser>>, active=<Optional:True>)
55
55
56 Creates a new user group.
56 Creates a new user group.
57
57
58 This command can only be run using an |authtoken| with admin rights to
58 This command can only be run using an |authtoken| with admin rights to
59 the specified repository.
59 the specified repository.
60
60
61 This command takes the following options:
61 This command takes the following options:
62
62
63 :param apiuser: This is filled automatically from the |authtoken|.
63 :param apiuser: This is filled automatically from the |authtoken|.
64 :type apiuser: AuthUser
64 :type apiuser: AuthUser
65 :param group_name: Set the name of the new user group.
65 :param group_name: Set the name of the new user group.
66 :type group_name: str
66 :type group_name: str
67 :param description: Give a description of the new user group.
67 :param description: Give a description of the new user group.
68 :type description: str
68 :type description: str
69 :param owner: Set the owner of the new user group.
69 :param owner: Set the owner of the new user group.
70 If not set, the owner is the |authtoken| user.
70 If not set, the owner is the |authtoken| user.
71 :type owner: Optional(str or int)
71 :type owner: Optional(str or int)
72 :param active: Set this group as active.
72 :param active: Set this group as active.
73 :type active: Optional(``True`` | ``False``)
73 :type active: Optional(``True`` | ``False``)
74
74
75 Example output:
75 Example output:
76
76
77 .. code-block:: bash
77 .. code-block:: bash
78
78
79 id : <id_given_in_input>
79 id : <id_given_in_input>
80 result: {
80 result: {
81 "msg": "created new user group `<groupname>`",
81 "msg": "created new user group `<groupname>`",
82 "user_group": <user_group_object>
82 "user_group": <user_group_object>
83 }
83 }
84 error: null
84 error: null
85
85
86 Example error output:
86 Example error output:
87
87
88 .. code-block:: bash
88 .. code-block:: bash
89
89
90 id : <id_given_in_input>
90 id : <id_given_in_input>
91 result : null
91 result : null
92 error : {
92 error : {
93 "user group `<group name>` already exist"
93 "user group `<group name>` already exist"
94 or
94 or
95 "failed to create group `<group name>`"
95 "failed to create group `<group name>`"
96 }
96 }
97
97
98
98
99 delete_user_group
99 delete_user_group
100 -----------------
100 -----------------
101
101
102 .. py:function:: delete_user_group(apiuser, usergroupid)
102 .. py:function:: delete_user_group(apiuser, usergroupid)
103
103
104 Deletes the specified `user group`.
104 Deletes the specified `user group`.
105
105
106 This command can only be run using an |authtoken| with admin rights to
106 This command can only be run using an |authtoken| with admin rights to
107 the specified repository.
107 the specified repository.
108
108
109 This command takes the following options:
109 This command takes the following options:
110
110
111 :param apiuser: filled automatically from apikey
111 :param apiuser: filled automatically from apikey
112 :type apiuser: AuthUser
112 :type apiuser: AuthUser
113 :param usergroupid:
113 :param usergroupid:
114 :type usergroupid: int
114 :type usergroupid: int
115
115
116 Example output:
116 Example output:
117
117
118 .. code-block:: bash
118 .. code-block:: bash
119
119
120 id : <id_given_in_input>
120 id : <id_given_in_input>
121 result : {
121 result : {
122 "msg": "deleted user group ID:<user_group_id> <user_group_name>"
122 "msg": "deleted user group ID:<user_group_id> <user_group_name>"
123 }
123 }
124 error : null
124 error : null
125
125
126 Example error output:
126 Example error output:
127
127
128 .. code-block:: bash
128 .. code-block:: bash
129
129
130 id : <id_given_in_input>
130 id : <id_given_in_input>
131 result : null
131 result : null
132 error : {
132 error : {
133 "failed to delete user group ID:<user_group_id> <user_group_name>"
133 "failed to delete user group ID:<user_group_id> <user_group_name>"
134 or
134 or
135 "RepoGroup assigned to <repo_groups_list>"
135 "RepoGroup assigned to <repo_groups_list>"
136 }
136 }
137
137
138
138
139 get_user_group
139 get_user_group
140 --------------
140 --------------
141
141
142 .. py:function:: get_user_group(apiuser, usergroupid)
142 .. py:function:: get_user_group(apiuser, usergroupid)
143
143
144 Returns the data of an existing user group.
144 Returns the data of an existing user group.
145
145
146 This command can only be run using an |authtoken| with admin rights to
146 This command can only be run using an |authtoken| with admin rights to
147 the specified repository.
147 the specified repository.
148
148
149 :param apiuser: This is filled automatically from the |authtoken|.
149 :param apiuser: This is filled automatically from the |authtoken|.
150 :type apiuser: AuthUser
150 :type apiuser: AuthUser
151 :param usergroupid: Set the user group from which to return data.
151 :param usergroupid: Set the user group from which to return data.
152 :type usergroupid: str or int
152 :type usergroupid: str or int
153
153
154 Example error output:
154 Example error output:
155
155
156 .. code-block:: bash
156 .. code-block:: bash
157
157
158 {
158 {
159 "error": null,
159 "error": null,
160 "id": <id>,
160 "id": <id>,
161 "result": {
161 "result": {
162 "active": true,
162 "active": true,
163 "group_description": "group description",
163 "group_description": "group description",
164 "group_name": "group name",
164 "group_name": "group name",
165 "members": [
165 "members": [
166 {
166 {
167 "name": "owner-name",
167 "name": "owner-name",
168 "origin": "owner",
168 "origin": "owner",
169 "permission": "usergroup.admin",
169 "permission": "usergroup.admin",
170 "type": "user"
170 "type": "user"
171 },
171 },
172 {
172 {
173 {
173 {
174 "name": "user name",
174 "name": "user name",
175 "origin": "permission",
175 "origin": "permission",
176 "permission": "usergroup.admin",
176 "permission": "usergroup.admin",
177 "type": "user"
177 "type": "user"
178 },
178 },
179 {
179 {
180 "name": "user group name",
180 "name": "user group name",
181 "origin": "permission",
181 "origin": "permission",
182 "permission": "usergroup.write",
182 "permission": "usergroup.write",
183 "type": "user_group"
183 "type": "user_group"
184 }
184 }
185 ],
185 ],
186 "owner": "owner name",
186 "owner": "owner name",
187 "users": [],
187 "users": [],
188 "users_group_id": 2
188 "users_group_id": 2
189 }
189 }
190 }
190 }
191
191
192
192
193 get_user_groups
193 get_user_groups
194 ---------------
194 ---------------
195
195
196 .. py:function:: get_user_groups(apiuser)
196 .. py:function:: get_user_groups(apiuser)
197
197
198 Lists all the existing user groups within RhodeCode.
198 Lists all the existing user groups within RhodeCode.
199
199
200 This command can only be run using an |authtoken| with admin rights to
200 This command can only be run using an |authtoken| with admin rights to
201 the specified repository.
201 the specified repository.
202
202
203 This command takes the following options:
203 This command takes the following options:
204
204
205 :param apiuser: This is filled automatically from the |authtoken|.
205 :param apiuser: This is filled automatically from the |authtoken|.
206 :type apiuser: AuthUser
206 :type apiuser: AuthUser
207
207
208 Example error output:
208 Example error output:
209
209
210 .. code-block:: bash
210 .. code-block:: bash
211
211
212 id : <id_given_in_input>
212 id : <id_given_in_input>
213 result : [<user_group_obj>,...]
213 result : [<user_group_obj>,...]
214 error : null
214 error : null
215
215
216
216
217 grant_user_group_permission_to_user_group
217 grant_user_group_permission_to_user_group
218 -----------------------------------------
218 -----------------------------------------
219
219
220 .. py:function:: grant_user_group_permission_to_user_group(apiuser, usergroupid, sourceusergroupid, perm)
220 .. py:function:: grant_user_group_permission_to_user_group(apiuser, usergroupid, sourceusergroupid, perm)
221
221
222 Give one user group permissions to another user group.
222 Give one user group permissions to another user group.
223
223
224 :param apiuser: This is filled automatically from the |authtoken|.
224 :param apiuser: This is filled automatically from the |authtoken|.
225 :type apiuser: AuthUser
225 :type apiuser: AuthUser
226 :param usergroupid: Set the user group on which to edit permissions.
226 :param usergroupid: Set the user group on which to edit permissions.
227 :type usergroupid: str or int
227 :type usergroupid: str or int
228 :param sourceusergroupid: Set the source user group to which
228 :param sourceusergroupid: Set the source user group to which
229 access/permissions will be granted.
229 access/permissions will be granted.
230 :type sourceusergroupid: str or int
230 :type sourceusergroupid: str or int
231 :param perm: (usergroup.(none|read|write|admin))
231 :param perm: (usergroup.(none|read|write|admin))
232 :type perm: str
232 :type perm: str
233
233
234 Example output:
234 Example output:
235
235
236 .. code-block:: bash
236 .. code-block:: bash
237
237
238 id : <id_given_in_input>
238 id : <id_given_in_input>
239 result : {
239 result : {
240 "msg": "Granted perm: `<perm_name>` for user group: `<source_user_group_name>` in user group: `<user_group_name>`",
240 "msg": "Granted perm: `<perm_name>` for user group: `<source_user_group_name>` in user group: `<user_group_name>`",
241 "success": true
241 "success": true
242 }
242 }
243 error : null
243 error : null
244
244
245
245
246 grant_user_permission_to_user_group
246 grant_user_permission_to_user_group
247 -----------------------------------
247 -----------------------------------
248
248
249 .. py:function:: grant_user_permission_to_user_group(apiuser, usergroupid, userid, perm)
249 .. py:function:: grant_user_permission_to_user_group(apiuser, usergroupid, userid, perm)
250
250
251 Set permissions for a user in a user group.
251 Set permissions for a user in a user group.
252
252
253 :param apiuser: This is filled automatically from the |authtoken|.
253 :param apiuser: This is filled automatically from the |authtoken|.
254 :type apiuser: AuthUser
254 :type apiuser: AuthUser
255 :param usergroupid: Set the user group to edit permissions on.
255 :param usergroupid: Set the user group to edit permissions on.
256 :type usergroupid: str or int
256 :type usergroupid: str or int
257 :param userid: Set the user from whom you wish to set permissions.
257 :param userid: Set the user from whom you wish to set permissions.
258 :type userid: str
258 :type userid: str
259 :param perm: (usergroup.(none|read|write|admin))
259 :param perm: (usergroup.(none|read|write|admin))
260 :type perm: str
260 :type perm: str
261
261
262 Example output:
262 Example output:
263
263
264 .. code-block:: bash
264 .. code-block:: bash
265
265
266 id : <id_given_in_input>
266 id : <id_given_in_input>
267 result : {
267 result : {
268 "msg": "Granted perm: `<perm_name>` for user: `<username>` in user group: `<user_group_name>`",
268 "msg": "Granted perm: `<perm_name>` for user: `<username>` in user group: `<user_group_name>`",
269 "success": true
269 "success": true
270 }
270 }
271 error : null
271 error : null
272
272
273
273
274 remove_user_from_user_group
274 remove_user_from_user_group
275 ---------------------------
275 ---------------------------
276
276
277 .. py:function:: remove_user_from_user_group(apiuser, usergroupid, userid)
277 .. py:function:: remove_user_from_user_group(apiuser, usergroupid, userid)
278
278
279 Removes a user from a user group.
279 Removes a user from a user group.
280
280
281 * If the specified user is not in the group, this command will return
281 * If the specified user is not in the group, this command will return
282 `false`.
282 `false`.
283
283
284 This command can only be run using an |authtoken| with admin rights to
284 This command can only be run using an |authtoken| with admin rights to
285 the specified user group.
285 the specified user group.
286
286
287 :param apiuser: This is filled automatically from the |authtoken|.
287 :param apiuser: This is filled automatically from the |authtoken|.
288 :type apiuser: AuthUser
288 :type apiuser: AuthUser
289 :param usergroupid: Sets the user group name.
289 :param usergroupid: Sets the user group name.
290 :type usergroupid: str or int
290 :type usergroupid: str or int
291 :param userid: The user you wish to remove from |RCE|.
291 :param userid: The user you wish to remove from |RCE|.
292 :type userid: str or int
292 :type userid: str or int
293
293
294 Example output:
294 Example output:
295
295
296 .. code-block:: bash
296 .. code-block:: bash
297
297
298 id : <id_given_in_input>
298 id : <id_given_in_input>
299 result: {
299 result: {
300 "success": True|False, # depends on if member is in group
300 "success": True|False, # depends on if member is in group
301 "msg": "removed member <username> from user group <groupname> |
301 "msg": "removed member <username> from user group <groupname> |
302 User wasn't in group"
302 User wasn't in group"
303 }
303 }
304 error: null
304 error: null
305
305
306
306
307 revoke_user_group_permission_from_user_group
307 revoke_user_group_permission_from_user_group
308 --------------------------------------------
308 --------------------------------------------
309
309
310 .. py:function:: revoke_user_group_permission_from_user_group(apiuser, usergroupid, sourceusergroupid)
310 .. py:function:: revoke_user_group_permission_from_user_group(apiuser, usergroupid, sourceusergroupid)
311
311
312 Revoke the permissions that one user group has to another.
312 Revoke the permissions that one user group has to another.
313
313
314 :param apiuser: This is filled automatically from the |authtoken|.
314 :param apiuser: This is filled automatically from the |authtoken|.
315 :type apiuser: AuthUser
315 :type apiuser: AuthUser
316 :param usergroupid: Set the user group on which to edit permissions.
316 :param usergroupid: Set the user group on which to edit permissions.
317 :type usergroupid: str or int
317 :type usergroupid: str or int
318 :param sourceusergroupid: Set the user group from which permissions
318 :param sourceusergroupid: Set the user group from which permissions
319 are revoked.
319 are revoked.
320 :type sourceusergroupid: str or int
320 :type sourceusergroupid: str or int
321
321
322 Example output:
322 Example output:
323
323
324 .. code-block:: bash
324 .. code-block:: bash
325
325
326 id : <id_given_in_input>
326 id : <id_given_in_input>
327 result : {
327 result : {
328 "msg": "Revoked perm for user group: `<user_group_name>` in user group: `<target_user_group_name>`",
328 "msg": "Revoked perm for user group: `<user_group_name>` in user group: `<target_user_group_name>`",
329 "success": true
329 "success": true
330 }
330 }
331 error : null
331 error : null
332
332
333
333
334 revoke_user_permission_from_user_group
334 revoke_user_permission_from_user_group
335 --------------------------------------
335 --------------------------------------
336
336
337 .. py:function:: revoke_user_permission_from_user_group(apiuser, usergroupid, userid)
337 .. py:function:: revoke_user_permission_from_user_group(apiuser, usergroupid, userid)
338
338
339 Revoke a users permissions in a user group.
339 Revoke a users permissions in a user group.
340
340
341 :param apiuser: This is filled automatically from the |authtoken|.
341 :param apiuser: This is filled automatically from the |authtoken|.
342 :type apiuser: AuthUser
342 :type apiuser: AuthUser
343 :param usergroupid: Set the user group from which to revoke the user
343 :param usergroupid: Set the user group from which to revoke the user
344 permissions.
344 permissions.
345 :type: usergroupid: str or int
345 :type: usergroupid: str or int
346 :param userid: Set the userid of the user whose permissions will be
346 :param userid: Set the userid of the user whose permissions will be
347 revoked.
347 revoked.
348 :type userid: str
348 :type userid: str
349
349
350 Example output:
350 Example output:
351
351
352 .. code-block:: bash
352 .. code-block:: bash
353
353
354 id : <id_given_in_input>
354 id : <id_given_in_input>
355 result : {
355 result : {
356 "msg": "Revoked perm for user: `<username>` in user group: `<user_group_name>`",
356 "msg": "Revoked perm for user: `<username>` in user group: `<user_group_name>`",
357 "success": true
357 "success": true
358 }
358 }
359 error : null
359 error : null
360
360
361
361
362 update_user_group
362 update_user_group
363 -----------------
363 -----------------
364
364
365 .. py:function:: update_user_group(apiuser, usergroupid, group_name=<Optional:''>, description=<Optional:''>, owner=<Optional:None>, active=<Optional:True>)
365 .. py:function:: update_user_group(apiuser, usergroupid, group_name=<Optional:''>, description=<Optional:''>, owner=<Optional:None>, active=<Optional:True>)
366
366
367 Updates the specified `user group` with the details provided.
367 Updates the specified `user group` with the details provided.
368
368
369 This command can only be run using an |authtoken| with admin rights to
369 This command can only be run using an |authtoken| with admin rights to
370 the specified repository.
370 the specified repository.
371
371
372 :param apiuser: This is filled automatically from the |authtoken|.
372 :param apiuser: This is filled automatically from the |authtoken|.
373 :type apiuser: AuthUser
373 :type apiuser: AuthUser
374 :param usergroupid: Set the id of the `user group` to update.
374 :param usergroupid: Set the id of the `user group` to update.
375 :type usergroupid: str or int
375 :type usergroupid: str or int
376 :param group_name: Set the new name the `user group`
376 :param group_name: Set the new name the `user group`
377 :type group_name: str
377 :type group_name: str
378 :param description: Give a description for the `user group`
378 :param description: Give a description for the `user group`
379 :type description: str
379 :type description: str
380 :param owner: Set the owner of the `user group`.
380 :param owner: Set the owner of the `user group`.
381 :type owner: Optional(str or int)
381 :type owner: Optional(str or int)
382 :param active: Set the group as active.
382 :param active: Set the group as active.
383 :type active: Optional(``True`` | ``False``)
383 :type active: Optional(``True`` | ``False``)
384
384
385 Example output:
385 Example output:
386
386
387 .. code-block:: bash
387 .. code-block:: bash
388
388
389 id : <id_given_in_input>
389 id : <id_given_in_input>
390 result : {
390 result : {
391 "msg": 'updated user group ID:<user group id> <user group name>',
391 "msg": 'updated user group ID:<user group id> <user group name>',
392 "user_group": <user_group_object>
392 "user_group": <user_group_object>
393 }
393 }
394 error : null
394 error : null
395
395
396 Example error output:
396 Example error output:
397
397
398 .. code-block:: bash
398 .. code-block:: bash
399
399
400 id : <id_given_in_input>
400 id : <id_given_in_input>
401 result : null
401 result : null
402 error : {
402 error : {
403 "failed to update user group `<user group name>`"
403 "failed to update user group `<user group name>`"
404 }
404 }
405
405
406
406
@@ -1,295 +1,297 b''
1 .. _user-methods-ref:
1 .. _user-methods-ref:
2
2
3 user methods
3 user methods
4 =================
4 ============
5
5
6 create_user
6 create_user
7 -----------
7 -----------
8
8
9 .. py:function:: create_user(apiuser, username, email, password=<Optional:''>, firstname=<Optional:''>, lastname=<Optional:''>, active=<Optional:True>, admin=<Optional:False>, extern_name=<Optional:'rhodecode'>, extern_type=<Optional:'rhodecode'>, force_password_change=<Optional:False>)
9 .. py:function:: create_user(apiuser, username, email, password=<Optional:''>, firstname=<Optional:''>, lastname=<Optional:''>, active=<Optional:True>, admin=<Optional:False>, extern_name=<Optional:'rhodecode'>, extern_type=<Optional:'rhodecode'>, force_password_change=<Optional:False>, create_personal_repo_group=<Optional:None>)
10
10
11 Creates a new user and returns the new user object.
11 Creates a new user and returns the new user object.
12
12
13 This command can only be run using an |authtoken| with admin rights to
13 This command can only be run using an |authtoken| with admin rights to
14 the specified repository.
14 the specified repository.
15
15
16 This command takes the following options:
16 This command takes the following options:
17
17
18 :param apiuser: This is filled automatically from the |authtoken|.
18 :param apiuser: This is filled automatically from the |authtoken|.
19 :type apiuser: AuthUser
19 :type apiuser: AuthUser
20 :param username: Set the new username.
20 :param username: Set the new username.
21 :type username: str or int
21 :type username: str or int
22 :param email: Set the user email address.
22 :param email: Set the user email address.
23 :type email: str
23 :type email: str
24 :param password: Set the new user password.
24 :param password: Set the new user password.
25 :type password: Optional(str)
25 :type password: Optional(str)
26 :param firstname: Set the new user firstname.
26 :param firstname: Set the new user firstname.
27 :type firstname: Optional(str)
27 :type firstname: Optional(str)
28 :param lastname: Set the new user surname.
28 :param lastname: Set the new user surname.
29 :type lastname: Optional(str)
29 :type lastname: Optional(str)
30 :param active: Set the user as active.
30 :param active: Set the user as active.
31 :type active: Optional(``True`` | ``False``)
31 :type active: Optional(``True`` | ``False``)
32 :param admin: Give the new user admin rights.
32 :param admin: Give the new user admin rights.
33 :type admin: Optional(``True`` | ``False``)
33 :type admin: Optional(``True`` | ``False``)
34 :param extern_name: Set the authentication plugin name.
34 :param extern_name: Set the authentication plugin name.
35 Using LDAP this is filled with LDAP UID.
35 Using LDAP this is filled with LDAP UID.
36 :type extern_name: Optional(str)
36 :type extern_name: Optional(str)
37 :param extern_type: Set the new user authentication plugin.
37 :param extern_type: Set the new user authentication plugin.
38 :type extern_type: Optional(str)
38 :type extern_type: Optional(str)
39 :param force_password_change: Force the new user to change password
39 :param force_password_change: Force the new user to change password
40 on next login.
40 on next login.
41 :type force_password_change: Optional(``True`` | ``False``)
41 :type force_password_change: Optional(``True`` | ``False``)
42
42 :param create_personal_repo_group: Create personal repo group for this user
43 :type create_personal_repo_group: Optional(``True`` | ``False``)
43 Example output:
44 Example output:
44
45
45 .. code-block:: bash
46 .. code-block:: bash
46
47
47 id : <id_given_in_input>
48 id : <id_given_in_input>
48 result: {
49 result: {
49 "msg" : "created new user `<username>`",
50 "msg" : "created new user `<username>`",
50 "user": <user_obj>
51 "user": <user_obj>
51 }
52 }
52 error: null
53 error: null
53
54
54 Example error output:
55 Example error output:
55
56
56 .. code-block:: bash
57 .. code-block:: bash
57
58
58 id : <id_given_in_input>
59 id : <id_given_in_input>
59 result : null
60 result : null
60 error : {
61 error : {
61 "user `<username>` already exist"
62 "user `<username>` already exist"
62 or
63 or
63 "email `<email>` already exist"
64 "email `<email>` already exist"
64 or
65 or
65 "failed to create user `<username>`"
66 "failed to create user `<username>`"
66 }
67 }
67
68
68
69
69 delete_user
70 delete_user
70 -----------
71 -----------
71
72
72 .. py:function:: delete_user(apiuser, userid)
73 .. py:function:: delete_user(apiuser, userid)
73
74
74 Deletes the specified user from the |RCE| user database.
75 Deletes the specified user from the |RCE| user database.
75
76
76 This command can only be run using an |authtoken| with admin rights to
77 This command can only be run using an |authtoken| with admin rights to
77 the specified repository.
78 the specified repository.
78
79
79 .. important::
80 .. important::
80
81
81 Ensure all open pull requests and open code review
82 Ensure all open pull requests and open code review
82 requests to this user are close.
83 requests to this user are close.
83
84
84 Also ensure all repositories, or repository groups owned by this
85 Also ensure all repositories, or repository groups owned by this
85 user are reassigned before deletion.
86 user are reassigned before deletion.
86
87
87 This command takes the following options:
88 This command takes the following options:
88
89
89 :param apiuser: This is filled automatically from the |authtoken|.
90 :param apiuser: This is filled automatically from the |authtoken|.
90 :type apiuser: AuthUser
91 :type apiuser: AuthUser
91 :param userid: Set the user to delete.
92 :param userid: Set the user to delete.
92 :type userid: str or int
93 :type userid: str or int
93
94
94 Example output:
95 Example output:
95
96
96 .. code-block:: bash
97 .. code-block:: bash
97
98
98 id : <id_given_in_input>
99 id : <id_given_in_input>
99 result: {
100 result: {
100 "msg" : "deleted user ID:<userid> <username>",
101 "msg" : "deleted user ID:<userid> <username>",
101 "user": null
102 "user": null
102 }
103 }
103 error: null
104 error: null
104
105
105 Example error output:
106 Example error output:
106
107
107 .. code-block:: bash
108 .. code-block:: bash
108
109
109 id : <id_given_in_input>
110 id : <id_given_in_input>
110 result : null
111 result : null
111 error : {
112 error : {
112 "failed to delete user ID:<userid> <username>"
113 "failed to delete user ID:<userid> <username>"
113 }
114 }
114
115
115
116
116 get_user
117 get_user
117 --------
118 --------
118
119
119 .. py:function:: get_user(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
120 .. py:function:: get_user(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
120
121
121 Returns the information associated with a username or userid.
122 Returns the information associated with a username or userid.
122
123
123 * If the ``userid`` is not set, this command returns the information
124 * If the ``userid`` is not set, this command returns the information
124 for the ``userid`` calling the method.
125 for the ``userid`` calling the method.
125
126
126 .. note::
127 .. note::
127
128
128 Normal users may only run this command against their ``userid``. For
129 Normal users may only run this command against their ``userid``. For
129 full privileges you must run this command using an |authtoken| with
130 full privileges you must run this command using an |authtoken| with
130 admin rights.
131 admin rights.
131
132
132 :param apiuser: This is filled automatically from the |authtoken|.
133 :param apiuser: This is filled automatically from the |authtoken|.
133 :type apiuser: AuthUser
134 :type apiuser: AuthUser
134 :param userid: Sets the userid for which data will be returned.
135 :param userid: Sets the userid for which data will be returned.
135 :type userid: Optional(str or int)
136 :type userid: Optional(str or int)
136
137
137 Example output:
138 Example output:
138
139
139 .. code-block:: bash
140 .. code-block:: bash
140
141
141 {
142 {
142 "error": null,
143 "error": null,
143 "id": <id>,
144 "id": <id>,
144 "result": {
145 "result": {
145 "active": true,
146 "active": true,
146 "admin": false,
147 "admin": false,
147 "api_key": "api-key",
148 "api_key": "api-key",
148 "api_keys": [ list of keys ],
149 "api_keys": [ list of keys ],
149 "email": "user@example.com",
150 "email": "user@example.com",
150 "emails": [
151 "emails": [
151 "user@example.com"
152 "user@example.com"
152 ],
153 ],
153 "extern_name": "rhodecode",
154 "extern_name": "rhodecode",
154 "extern_type": "rhodecode",
155 "extern_type": "rhodecode",
155 "firstname": "username",
156 "firstname": "username",
156 "ip_addresses": [],
157 "ip_addresses": [],
157 "language": null,
158 "language": null,
158 "last_login": "Timestamp",
159 "last_login": "Timestamp",
159 "lastname": "surnae",
160 "lastname": "surnae",
160 "permissions": {
161 "permissions": {
161 "global": [
162 "global": [
162 "hg.inherit_default_perms.true",
163 "hg.inherit_default_perms.true",
163 "usergroup.read",
164 "usergroup.read",
164 "hg.repogroup.create.false",
165 "hg.repogroup.create.false",
165 "hg.create.none",
166 "hg.create.none",
167 "hg.password_reset.enabled",
166 "hg.extern_activate.manual",
168 "hg.extern_activate.manual",
167 "hg.create.write_on_repogroup.false",
169 "hg.create.write_on_repogroup.false",
168 "hg.usergroup.create.false",
170 "hg.usergroup.create.false",
169 "group.none",
171 "group.none",
170 "repository.none",
172 "repository.none",
171 "hg.register.none",
173 "hg.register.none",
172 "hg.fork.repository"
174 "hg.fork.repository"
173 ],
175 ],
174 "repositories": { "username/example": "repository.write"},
176 "repositories": { "username/example": "repository.write"},
175 "repositories_groups": { "user-group/repo": "group.none" },
177 "repositories_groups": { "user-group/repo": "group.none" },
176 "user_groups": { "user_group_name": "usergroup.read" }
178 "user_groups": { "user_group_name": "usergroup.read" }
177 },
179 },
178 "user_id": 32,
180 "user_id": 32,
179 "username": "username"
181 "username": "username"
180 }
182 }
181 }
183 }
182
184
183
185
184 get_user_locks
186 get_user_locks
185 --------------
187 --------------
186
188
187 .. py:function:: get_user_locks(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
189 .. py:function:: get_user_locks(apiuser, userid=<Optional:<OptionalAttr:apiuser>>)
188
190
189 Displays all repositories locked by the specified user.
191 Displays all repositories locked by the specified user.
190
192
191 * If this command is run by a non-admin user, it returns
193 * If this command is run by a non-admin user, it returns
192 a list of |repos| locked by that user.
194 a list of |repos| locked by that user.
193
195
194 This command takes the following options:
196 This command takes the following options:
195
197
196 :param apiuser: This is filled automatically from the |authtoken|.
198 :param apiuser: This is filled automatically from the |authtoken|.
197 :type apiuser: AuthUser
199 :type apiuser: AuthUser
198 :param userid: Sets the userid whose list of locked |repos| will be
200 :param userid: Sets the userid whose list of locked |repos| will be
199 displayed.
201 displayed.
200 :type userid: Optional(str or int)
202 :type userid: Optional(str or int)
201
203
202 Example output:
204 Example output:
203
205
204 .. code-block:: bash
206 .. code-block:: bash
205
207
206 id : <id_given_in_input>
208 id : <id_given_in_input>
207 result : {
209 result : {
208 [repo_object, repo_object,...]
210 [repo_object, repo_object,...]
209 }
211 }
210 error : null
212 error : null
211
213
212
214
213 get_users
215 get_users
214 ---------
216 ---------
215
217
216 .. py:function:: get_users(apiuser)
218 .. py:function:: get_users(apiuser)
217
219
218 Lists all users in the |RCE| user database.
220 Lists all users in the |RCE| user database.
219
221
220 This command can only be run using an |authtoken| with admin rights to
222 This command can only be run using an |authtoken| with admin rights to
221 the specified repository.
223 the specified repository.
222
224
223 This command takes the following options:
225 This command takes the following options:
224
226
225 :param apiuser: This is filled automatically from the |authtoken|.
227 :param apiuser: This is filled automatically from the |authtoken|.
226 :type apiuser: AuthUser
228 :type apiuser: AuthUser
227
229
228 Example output:
230 Example output:
229
231
230 .. code-block:: bash
232 .. code-block:: bash
231
233
232 id : <id_given_in_input>
234 id : <id_given_in_input>
233 result: [<user_object>, ...]
235 result: [<user_object>, ...]
234 error: null
236 error: null
235
237
236
238
237 update_user
239 update_user
238 -----------
240 -----------
239
241
240 .. py:function:: update_user(apiuser, userid, username=<Optional:None>, email=<Optional:None>, password=<Optional:None>, firstname=<Optional:None>, lastname=<Optional:None>, active=<Optional:None>, admin=<Optional:None>, extern_type=<Optional:None>, extern_name=<Optional:None>)
242 .. py:function:: update_user(apiuser, userid, username=<Optional:None>, email=<Optional:None>, password=<Optional:None>, firstname=<Optional:None>, lastname=<Optional:None>, active=<Optional:None>, admin=<Optional:None>, extern_type=<Optional:None>, extern_name=<Optional:None>)
241
243
242 Updates the details for the specified user, if that user exists.
244 Updates the details for the specified user, if that user exists.
243
245
244 This command can only be run using an |authtoken| with admin rights to
246 This command can only be run using an |authtoken| with admin rights to
245 the specified repository.
247 the specified repository.
246
248
247 This command takes the following options:
249 This command takes the following options:
248
250
249 :param apiuser: This is filled automatically from |authtoken|.
251 :param apiuser: This is filled automatically from |authtoken|.
250 :type apiuser: AuthUser
252 :type apiuser: AuthUser
251 :param userid: Set the ``userid`` to update.
253 :param userid: Set the ``userid`` to update.
252 :type userid: str or int
254 :type userid: str or int
253 :param username: Set the new username.
255 :param username: Set the new username.
254 :type username: str or int
256 :type username: str or int
255 :param email: Set the new email.
257 :param email: Set the new email.
256 :type email: str
258 :type email: str
257 :param password: Set the new password.
259 :param password: Set the new password.
258 :type password: Optional(str)
260 :type password: Optional(str)
259 :param firstname: Set the new first name.
261 :param firstname: Set the new first name.
260 :type firstname: Optional(str)
262 :type firstname: Optional(str)
261 :param lastname: Set the new surname.
263 :param lastname: Set the new surname.
262 :type lastname: Optional(str)
264 :type lastname: Optional(str)
263 :param active: Set the new user as active.
265 :param active: Set the new user as active.
264 :type active: Optional(``True`` | ``False``)
266 :type active: Optional(``True`` | ``False``)
265 :param admin: Give the user admin rights.
267 :param admin: Give the user admin rights.
266 :type admin: Optional(``True`` | ``False``)
268 :type admin: Optional(``True`` | ``False``)
267 :param extern_name: Set the authentication plugin user name.
269 :param extern_name: Set the authentication plugin user name.
268 Using LDAP this is filled with LDAP UID.
270 Using LDAP this is filled with LDAP UID.
269 :type extern_name: Optional(str)
271 :type extern_name: Optional(str)
270 :param extern_type: Set the authentication plugin type.
272 :param extern_type: Set the authentication plugin type.
271 :type extern_type: Optional(str)
273 :type extern_type: Optional(str)
272
274
273
275
274 Example output:
276 Example output:
275
277
276 .. code-block:: bash
278 .. code-block:: bash
277
279
278 id : <id_given_in_input>
280 id : <id_given_in_input>
279 result: {
281 result: {
280 "msg" : "updated user ID:<userid> <username>",
282 "msg" : "updated user ID:<userid> <username>",
281 "user": <user_object>,
283 "user": <user_object>,
282 }
284 }
283 error: null
285 error: null
284
286
285 Example error output:
287 Example error output:
286
288
287 .. code-block:: bash
289 .. code-block:: bash
288
290
289 id : <id_given_in_input>
291 id : <id_given_in_input>
290 result : null
292 result : null
291 error : {
293 error : {
292 "failed to update user `<username>`"
294 "failed to update user `<username>`"
293 }
295 }
294
296
295
297
@@ -1,60 +1,60 b''
1
1
2 =====
2 ===================
3 API
3 CONTRIBUTING TO API
4 =====
4 ===================
5
5
6
6
7
7
8 Naming conventions
8 Naming conventions
9 ==================
9 ==================
10
10
11 We keep the calls in the form ``{verb}_{noun}``.
11 We keep the calls in the form ``{verb}_{noun}``.
12
12
13
13
14
14
15 Change and Deprecation
15 Change and Deprecation
16 ======================
16 ======================
17
17
18 API deprecation is documented in the section :ref:`deprecated` together with
18 API deprecation is documented in the section :ref:`deprecated` together with
19 other notes about deprecated parts of the application.
19 other notes about deprecated parts of the application.
20
20
21
21
22 Deprecated API calls
22 Deprecated API calls
23 --------------------
23 --------------------
24
24
25 - Make sure to add them into the section :ref:`deprecated`.
25 - Make sure to add them into the section :ref:`deprecated`.
26
26
27 - Use `deprecated` inside of the call docstring to make our users aware of the
27 - Use `deprecated` inside of the call docstring to make our users aware of the
28 deprecation::
28 deprecation::
29
29
30 .. deprecated:: 1.2.3
30 .. deprecated:: 1.2.3
31
31
32 Use `new_call_name` instead to fetch this information.
32 Use `new_call_name` instead to fetch this information.
33
33
34 - Make sure to log on level `logging.WARNING` a message that the API call or
34 - Make sure to log on level `logging.WARNING` a message that the API call or
35 specific parameters are deprecated.
35 specific parameters are deprecated.
36
36
37 - If possible return deprecation information inside of the result from the API
37 - If possible return deprecation information inside of the result from the API
38 call. Use the attribute `_warning_` to contain a message.
38 call. Use the attribute `_warning_` to contain a message.
39
39
40
40
41 Changed API calls
41 Changed API calls
42 -----------------
42 -----------------
43
43
44 - If the change is significant, consider to use `versionchanged` in the
44 - If the change is significant, consider to use `versionchanged` in the
45 docstring::
45 docstring::
46
46
47 .. versionchanged:: 1.2.3
47 .. versionchanged:: 1.2.3
48
48
49 Optional explanation if reasonable.
49 Optional explanation if reasonable.
50
50
51
51
52 Added API calls
52 Added API calls
53 ---------------
53 ---------------
54
54
55 - Use `versionadded` to document since which version this API call is
55 - Use `versionadded` to document since which version this API call is
56 available::
56 available::
57
57
58 .. versionadded:: 1.2.3
58 .. versionadded:: 1.2.3
59
59
60 Optional explanation if reasonable.
60 Optional explanation if reasonable.
@@ -1,137 +1,137 b''
1 .. _checklist-tickets:
1 .. _checklist-tickets:
2
2
3 =================
3 =================
4 Ticket Checklists
4 Ticket Checklists
5 =================
5 =================
6
6
7
7
8 Ticket Description
8 Ticket Description
9 ==================
9 ==================
10
10
11 In general these things really matter in the description:
11 In general these things really matter in the description:
12
12
13 - Reasoning / Rationale. Explain "WHY" it makes sense and is important.
13 - Reasoning / Rationale. Explain "WHY" it makes sense and is important.
14
14
15 - How to reproduce. Easy to follow steps, that’s important.
15 - How to reproduce. Easy to follow steps, that’s important.
16
16
17 - Observation: The problem (short)
17 - Observation: The problem (short)
18
18
19 - Expectation: How it should be (short)
19 - Expectation: How it should be (short)
20
20
21 - Specs: It is fine to draft them as good as it works.
21 - Specs: It is fine to draft them as good as it works.
22
22
23 If anything is unclear, please ask for a review or help on this via the
23 If anything is unclear, please ask for a review or help on this via the
24 Community Portal or Slack channel.
24 Community Portal or Slack channel.
25
25
26
26
27 Checklists for Tickets
27 Checklists for Tickets
28 ======================
28 ======================
29
29
30 BUG
30 BUG
31 ---
31 ---
32
32
33 Definition: An existing function that does not work as expected for the user.
33 Definition: An existing function that does not work as expected for the user.
34
34
35 - Problem description
35 - Problem description
36 - Steps needed to recreate (gherkin)
36 - Steps needed to recreate (gherkin)
37 - Link to the screen in question and/or description of how to find it via
37 - Link to the screen in question and/or description of how to find it via
38 navigation
38 navigation
39 - Explanation of what the expected outcome is
39 - Explanation of what the expected outcome is
40 - Any hints into the source of the problem
40 - Any hints into the source of the problem
41 - Information about platform/browser/db/etc. where applicable
41 - Information about platform/browser/db/etc. where applicable
42 - Examples of other similar cases which have different behaviour
42 - Examples of other similar cases which have different behaviour
43
43
44 DESIGN
44 DESIGN
45 ------
45 ------
46
46
47 Definition: Styling and user interface issues, including cosmetic improvements
47 Definition: Styling and user interface issues, including cosmetic improvements
48 or appearance and behaviour of frontend functionality.
48 or appearance and behaviour of frontend functionality.
49
49
50 - Screenshot/animation of existing page/behaviour
50 - Screenshot/animation of existing page/behaviour
51 - Sketches or wireframes if available
51 - Sketches or wireframes if available
52 - Link to the screen in question and/or description of how to find it via
52 - Link to the screen in question and/or description of how to find it via
53 navigation
53 navigation
54 - Problem description
54 - Problem description
55 - Explanation of what the expected outcome is
55 - Explanation of what the expected outcome is
56 - Since this may be examined by a designer; it should be written in a way that a
56 - Since this may be examined by a designer; it should be written in a way that a
57 non-developer can understand
57 non-developer can understand
58
58
59 EPIC
59 EPIC
60 ----
60 ----
61
61
62 Definition: A collection of tickets which together complete a larger overall
62 Definition: A collection of tickets which together complete a larger overall
63 project.
63 project.
64
64
65 - Benefit explanation
65 - Benefit explanation
66 - Clear objective - when is this complete?
66 - Clear objective - when is this complete?
67 - Explanations of exceptions/corner cases
67 - Explanations of exceptions/corner cases
68 - Documentation subtask
68 - Documentation subtask
69 - Comprehensive wireframes and/or design subtasks
69 - Comprehensive wireframes and/or design subtasks
70 - Links to subtasks
70 - Links to subtasks
71
71
72 FEATURE
72 FEATURE
73 -------
73 -------
74
74
75 Definition: A new function in the software which previously did not exist.
75 Definition: A new function in the software which previously did not exist.
76
76
77 - Benefit explanation
77 - Benefit explanation
78 - Clear objective
78 - Clear objective
79 - Explanations of exceptions/corner cases
79 - Explanations of exceptions/corner cases
80 - Documentation subtask
80 - Documentation subtask
81 - Comprehensive wireframes and/or design subtasks
81 - Comprehensive wireframes and/or design subtasks
82
82
83 SUPPORT
83 SUPPORT
84 -------
84 -------
85
85
86 Definition: An issue related to a customer report.
86 Definition: An issue related to a customer report.
87
87
88 - Link to support ticket, if available
88 - Link to support ticket, if available
89 - Problem description
89 - Problem description
90 - Steps needed to recreate (gherkin)
90 - Steps needed to recreate (gherkin)
91 - Link to the screen in question and/or description of how to find it via
91 - Link to the screen in question and/or description of how to find it via
92 navigation
92 navigation
93 - Explanation of what the expected outcome is
93 - Explanation of what the expected outcome is
94 - Any hints into the source of the problem
94 - Any hints into the source of the problem
95 - Information about platform/browser/db/etc. where applicable
95 - Information about platform/browser/db/etc. where applicable
96 - Examples of other similar cases which have different behaviour
96 - Examples of other similar cases which have different behaviour
97
97
98 TASK
98 TASK
99 ----
99 ----
100
100
101 Definition: An improvement or step towards implementing a feature or fixing
101 Definition: An improvement or step towards implementing a feature or fixing
102 a bug. Includes refactoring and other tech debt.
102 a bug. Includes refactoring and other tech debt.
103
103
104 - Clear objective
104 - Clear objective
105 - Benefit explanation
105 - Benefit explanation
106 - Links to parent/related tickets
106 - Links to parent/related tickets
107
107
108
108
109 All details below.
109 All details below.
110
110
111
111
112 External links:
112 External links:
113
113
114 - Avoid linking to external images; they disappear over time. Please attach any
114 - Avoid linking to external images; they disappear over time. Please attach any
115 relevant images to the ticket itself.
115 relevant images to the ticket itself.
116
116
117 - External links in general: They also disappear over time, consider copying the
117 - External links in general: They also disappear over time, consider copying the
118 relevant bit of information into a comment or write a paragraph to sum up the
118 relevant bit of information into a comment or write a paragraph to sum up the
119 general idea.
119 general idea.
120
120
121
121
122 Hints
122 Hints
123 =====
123 =====
124
124
125 Change Description
125 Change Description
126 ------------------
126 ------------------
127
127
128 It can be tricky to figure out how to change the description of a ticket. There
128 It can be tricky to figure out how to change the description of a ticket. There
129 is a very small pencil which has to be clicked once you see the edit form of a
129 is a very small pencil which has to be clicked once you see the edit form of a
130 ticket.
130 ticket.
131
131
132
132
133 .. figure:: images/redmine-description.png
133 .. figure:: ../images/redmine-description.png
134 :alt: Example of pencil to change the ticket description
134 :alt: Example of pencil to change the ticket description
135
135
136 Shows an example of the pencil which lets you change the description.
136 Shows an example of the pencil which lets you change the description.
137
137
@@ -1,75 +1,72 b''
1
1
2 .. _test-spec-by-example:
2 .. _test-spec-by-example:
3
3
4 ==========================
4 ==========================
5 Specification by Example
5 Specification by Example
6 ==========================
6 ==========================
7
7
8
8
9 .. Avoid duplicating the quickstart instructions by importing the README
9 .. Avoid duplicating the quickstart instructions by importing the README
10 file.
10 file.
11
11
12 .. include:: ../../../acceptance_tests/README.rst
13
14
15
12
16 Choices of technology and tools
13 Choices of technology and tools
17 ===============================
14 ===============================
18
15
19
16
20 `nix` as runtime environment
17 `nix` as runtime environment
21 ----------------------------
18 ----------------------------
22
19
23 We settled to use the `nix` tools to provide us the needed environment for
20 We settled to use the `nix` tools to provide us the needed environment for
24 running the tests.
21 running the tests.
25
22
26
23
27
24
28 `Gherkins` as specification language
25 `Gherkins` as specification language
29 ------------------------------------
26 ------------------------------------
30
27
31 To specify by example, we settled on Gherkins as the semi-formal specification
28 To specify by example, we settled on Gherkins as the semi-formal specification
32 language.
29 language.
33
30
34
31
35 `py.test` as a runner
32 `py.test` as a runner
36 ---------------------
33 ---------------------
37
34
38 After experimenting with `behave` and `py.test` our choice was `pytest-bdd`
35 After experimenting with `behave` and `py.test` our choice was `pytest-bdd`
39 because it allows us to use our existing knowledge about `py.test` and avoids
36 because it allows us to use our existing knowledge about `py.test` and avoids
40 that we have to learn another tool.
37 that we have to learn another tool.
41
38
42
39
43
40
44 Concepts
41 Concepts
45 ========
42 ========
46
43
47 The logic is structured around the design pattern of "page objects". The
44 The logic is structured around the design pattern of "page objects". The
48 documentation of `python-selemium` contains a few more details about this
45 documentation of `python-selemium` contains a few more details about this
49 pattern.
46 pattern.
50
47
51
48
52
49
53 Page Objects
50 Page Objects
54 ------------
51 ------------
55
52
56 We introduce an abstraction class for every page which we have to interact with
53 We introduce an abstraction class for every page which we have to interact with
57 in order to validate the specifications.
54 in order to validate the specifications.
58
55
59 The implementation for the page objects is inside of the module
56 The implementation for the page objects is inside of the module
60 :mod:`page_objects`. The class :class:`page_objects.base.BasePage` should be
57 :mod:`page_objects`. The class :class:`page_objects.base.BasePage` should be
61 used as a base for all page object implementations.
58 used as a base for all page object implementations.
62
59
63
60
64
61
65 Locators
62 Locators
66 --------
63 --------
67
64
68 The specific information how to locate an element inside of the DOM tree of a
65 The specific information how to locate an element inside of the DOM tree of a
69 page is kept in a separate class. This class serves mainly as a data container;
66 page is kept in a separate class. This class serves mainly as a data container;
70 it shall not contain any logic.
67 it shall not contain any logic.
71
68
72 The reason for keeping the locators separate is that we expect a frequent need
69 The reason for keeping the locators separate is that we expect a frequent need
73 for change whenever we work on our templates. In such a case, it is more
70 for change whenever we work on our templates. In such a case, it is more
74 efficient to have all of thelocators together and update them there instead of
71 efficient to have all of thelocators together and update them there instead of
75 having to find every locator inside of the logic of a page object.
72 having to find every locator inside of the logic of a page object.
@@ -1,144 +1,144 b''
1 { system ? builtins.currentSystem
1 { system ? builtins.currentSystem
2 }:
2 }:
3
3
4 let
4 let
5
5
6 pkgs = import <nixpkgs> { inherit system; };
6 pkgs = import <nixpkgs> { inherit system; };
7
7
8 inherit (pkgs) fetchurl fetchgit;
8 inherit (pkgs) fetchurl fetchgit;
9
9
10 buildPythonPackage = pkgs.python27Packages.buildPythonPackage;
10 buildPythonPackage = pkgs.python27Packages.buildPythonPackage;
11 python = pkgs.python27Packages.python;
11 python = pkgs.python27Packages.python;
12
12
13 Jinja2 = buildPythonPackage rec {
13 Jinja2 = buildPythonPackage rec {
14 name = "Jinja2-2.7.3";
14 name = "Jinja2-2.7.3";
15 src = fetchurl {
15 src = fetchurl {
16 url = "http://pypi.python.org/packages/source/J/Jinja2/${name}.tar.gz";
16 url = "http://pypi.python.org/packages/source/J/Jinja2/${name}.tar.gz";
17 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
17 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
18 };
18 };
19 propagatedBuildInputs = [ MarkupSafe ];
19 propagatedBuildInputs = [ MarkupSafe ];
20 };
20 };
21
21
22 MarkupSafe = buildPythonPackage rec {
22 MarkupSafe = buildPythonPackage rec {
23 name = "MarkupSafe-0.23";
23 name = "MarkupSafe-0.23";
24 src = fetchurl {
24 src = fetchurl {
25 url = "https://pypi.python.org/packages/source/M/MarkupSafe/${name}.tar.gz";
25 url = "https://pypi.python.org/packages/source/M/MarkupSafe/${name}.tar.gz";
26 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
26 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
27 };
27 };
28 };
28 };
29
29
30 Pygments = buildPythonPackage rec {
30 Pygments = buildPythonPackage rec {
31 name = "Pygments-2.1.3";
31 name = "Pygments-2.1.3";
32 doCheck = false;
32 doCheck = false;
33 src = fetchurl {
33 src = fetchurl {
34 url = "https://pypi.python.org/packages/b8/67/ab177979be1c81bc99c8d0592ef22d547e70bb4c6815c383286ed5dec504/Pygments-2.1.3.tar.gz";
34 url = "https://pypi.python.org/packages/b8/67/ab177979be1c81bc99c8d0592ef22d547e70bb4c6815c383286ed5dec504/Pygments-2.1.3.tar.gz";
35 md5 = "ed3fba2467c8afcda4d317e4ef2c6150";
35 md5 = "ed3fba2467c8afcda4d317e4ef2c6150";
36 };
36 };
37 };
37 };
38
38
39 alabaster = buildPythonPackage rec {
39 alabaster = buildPythonPackage rec {
40 name = "alabaster-0.7.3";
40 name = "alabaster-0.7.3";
41 src = fetchurl {
41 src = fetchurl {
42 url = "https://pypi.python.org/packages/source/a/alabaster/${name}.tar.gz";
42 url = "https://pypi.python.org/packages/source/a/alabaster/${name}.tar.gz";
43 md5 = "67428d1383fd833f1282fed5deba0898";
43 md5 = "67428d1383fd833f1282fed5deba0898";
44 };
44 };
45 };
45 };
46
46
47 six = buildPythonPackage rec {
47 six = buildPythonPackage rec {
48 name = "six-1.9.0";
48 name = "six-1.9.0";
49 src = fetchurl {
49 src = fetchurl {
50 url = "https://pypi.python.org/packages/source/s/six/${name}.tar.gz";
50 url = "https://pypi.python.org/packages/source/s/six/${name}.tar.gz";
51 md5 = "476881ef4012262dfc8adc645ee786c4";
51 md5 = "476881ef4012262dfc8adc645ee786c4";
52 };
52 };
53 };
53 };
54
54
55 snowballstemmer = buildPythonPackage rec {
55 snowballstemmer = buildPythonPackage rec {
56 name = "snowballstemmer-1.2.0";
56 name = "snowballstemmer-1.2.0";
57 src = fetchurl {
57 src = fetchurl {
58 url = "https://pypi.python.org/packages/source/s/snowballstemmer/${name}.tar.gz";
58 url = "https://pypi.python.org/packages/source/s/snowballstemmer/${name}.tar.gz";
59 md5 = "51f2ef829db8129dd0f2354f0b209970";
59 md5 = "51f2ef829db8129dd0f2354f0b209970";
60 };
60 };
61 };
61 };
62
62
63 pytz = buildPythonPackage rec {
63 pytz = buildPythonPackage rec {
64 name = "pytz-2015.2";
64 name = "pytz-2015.2";
65 src = fetchurl {
65 src = fetchurl {
66 url = "https://pypi.python.org/packages/source/p/pytz/${name}.tar.gz";
66 url = "https://pypi.python.org/packages/source/p/pytz/${name}.tar.gz";
67 md5 = "08440d994cfbbf13d3343362cc3173f7";
67 md5 = "08440d994cfbbf13d3343362cc3173f7";
68 };
68 };
69 };
69 };
70
70
71 babel = buildPythonPackage rec {
71 babel = buildPythonPackage rec {
72 name = "Babel-1.3";
72 name = "Babel-1.3";
73 src = fetchurl {
73 src = fetchurl {
74 url = "https://pypi.python.org/packages/source/B/Babel/${name}.tar.gz";
74 url = "https://pypi.python.org/packages/source/B/Babel/${name}.tar.gz";
75 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
75 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
76 };
76 };
77 propagatedBuildInputs = [
77 propagatedBuildInputs = [
78 pytz
78 pytz
79 ];
79 ];
80 };
80 };
81
81
82 imagesize = buildPythonPackage rec {
82 imagesize = buildPythonPackage rec {
83 name = "imagesize-0.7.1";
83 name = "imagesize-0.7.1";
84 src = fetchurl {
84 src = fetchurl {
85 url = "https://pypi.python.org/packages/53/72/6c6f1e787d9cab2cc733cf042f125abec07209a58308831c9f292504e826/${name}.tar.gz";
85 url = "https://pypi.python.org/packages/53/72/6c6f1e787d9cab2cc733cf042f125abec07209a58308831c9f292504e826/${name}.tar.gz";
86 md5 = "976148283286a6ba5f69b0f81aef8052";
86 md5 = "976148283286a6ba5f69b0f81aef8052";
87 };
87 };
88 };
88 };
89
89
90 Sphinx = buildPythonPackage (rec {
90 Sphinx = buildPythonPackage (rec {
91 name = "Sphinx-1.4.4";
91 name = "Sphinx-1.4.8";
92 src = fetchurl {
92 src = fetchurl {
93 url = "https://pypi.python.org/packages/20/a2/72f44c84f6c4115e3fef58d36d657ec311d80196eab9fd5ec7bcde76143b/${name}.tar.gz";
93 url = "https://pypi.python.org/packages/1f/f6/e54a7aad73e35232356103771ae76306dadd8546b024c646fbe75135571c/${name}.tar.gz";
94 md5 = "64ce2ec08d37ed56313a98232cbe2aee";
94 md5 = "5ec718a4855917e149498bba91b74e67";
95 };
95 };
96 propagatedBuildInputs = [
96 propagatedBuildInputs = [
97 docutils
97 docutils
98 Jinja2
98 Jinja2
99 Pygments
99 Pygments
100 alabaster
100 alabaster
101 six
101 six
102 snowballstemmer
102 snowballstemmer
103 pytz
103 pytz
104 babel
104 babel
105 imagesize
105 imagesize
106
106
107 # TODO: johbo: Had to include it here so that can be imported
107 # TODO: johbo: Had to include it here so that can be imported
108 sphinx_rtd_theme
108 sphinx_rtd_theme
109 ];
109 ];
110 });
110 });
111
111
112 docutils = buildPythonPackage rec {
112 docutils = buildPythonPackage rec {
113 name = "docutils-0.12";
113 name = "docutils-0.12";
114 src = fetchurl {
114 src = fetchurl {
115 url = "https://pypi.python.org/packages/source/d/docutils/${name}.tar.gz";
115 url = "https://pypi.python.org/packages/source/d/docutils/${name}.tar.gz";
116 md5 = "4622263b62c5c771c03502afa3157768";
116 md5 = "4622263b62c5c771c03502afa3157768";
117 };
117 };
118 };
118 };
119
119
120 sphinx_rtd_theme = buildPythonPackage rec {
120 sphinx_rtd_theme = buildPythonPackage rec {
121 name = "sphinx_rtd_theme-0.1.9";
121 name = "sphinx_rtd_theme-0.1.9";
122 src = fetchurl {
122 src = fetchurl {
123 url = "https://pypi.python.org/packages/source/s/sphinx_rtd_theme/${name}.tar.gz";
123 url = "https://pypi.python.org/packages/source/s/sphinx_rtd_theme/${name}.tar.gz";
124 md5 = "86a25c8d47147c872e42dc84cc66f97b";
124 md5 = "86a25c8d47147c872e42dc84cc66f97b";
125 };
125 };
126
126
127 # Note: johbo: Sphinx needs this package and this package needs sphinx,
127 # Note: johbo: Sphinx needs this package and this package needs sphinx,
128 # ignore the requirements file to solve this cycle.
128 # ignore the requirements file to solve this cycle.
129 postPatch = ''
129 postPatch = ''
130 rm requirements.txt
130 rm requirements.txt
131 touch requirements.txt
131 touch requirements.txt
132 '';
132 '';
133
133
134 # TODO: johbo: Tests would require sphinx and this creates recursion issues
134 # TODO: johbo: Tests would require sphinx and this creates recursion issues
135 doCheck = false;
135 doCheck = false;
136 };
136 };
137
137
138 in python.buildEnv.override {
138 in python.buildEnv.override {
139 inherit python;
139 inherit python;
140 extraLibs = [
140 extraLibs = [
141 Sphinx
141 Sphinx
142 sphinx_rtd_theme
142 sphinx_rtd_theme
143 ];
143 ];
144 }
144 }
@@ -1,85 +1,87 b''
1 |RCM|
1 |RCM|
2 =====
2 =====
3
3
4 |RCM| is a high-performance source code management and collaboration system.
4 |RCM| is a high-performance source code management and collaboration system.
5 It enables you to develop projects securely behind the firewall while
5 It enables you to develop projects securely behind the firewall while
6 providing collaboration tools that work with |git|, |hg|,
6 providing collaboration tools that work with |git|, |hg|,
7 and |svn| |repos|. The user interface allows you to create, edit,
7 and |svn| |repos|. The user interface allows you to create, edit,
8 and commit files and |repos| while managing their security permissions.
8 and commit files and |repos| while managing their security permissions.
9
9
10 |RCM| provides the following features:
10 |RCM| provides the following features:
11
11
12 * Source code management.
12 * Source code management.
13 * Extended permissions management.
13 * Extended permissions management.
14 * Integrated code collaboration tools.
14 * Integrated code collaboration tools.
15 * Integrated code review and notifications.
15 * Integrated code review and notifications.
16 * Scalability provided by multi-node setup.
16 * Scalability provided by multi-node setup.
17 * Fully programmable automation API.
17 * Fully programmable automation API.
18 * Web-based hook management.
18 * Web-based hook management.
19 * Native |svn| support.
19 * Native |svn| support.
20 * Migration from existing databases.
20 * Migration from existing databases.
21 * |RCM| SDK.
21 * |RCM| SDK.
22 * Built-in analytics
22 * Built-in analytics
23 * Built in integrations including: Slack, Jenkins, Webhooks, Jira, Redmine, Hipchat
23 * Pluggable authentication system.
24 * Pluggable authentication system.
24 * Support for |LDAP|, Crowd, CAS, PAM.
25 * Support for AD, |LDAP|, Crowd, CAS, PAM.
26 * Support for external authentication via Oauth Google, Github, Bitbucket, Twitter.
25 * Debug modes of operation.
27 * Debug modes of operation.
26 * Private and public gists.
28 * Private and public gists.
27 * Gists with limited lifetimes and within instance only sharing.
29 * Gists with limited lifetimes and within instance only sharing.
28 * Fully integrated code search function.
30 * Fully integrated code search function.
29 * Always on SSL connectivity.
31 * Always on SSL connectivity.
30
32
31 .. only:: html
33 .. only:: html
32
34
33 Table of Contents
35 Table of Contents
34 -----------------
36 -----------------
35
37
36 .. toctree::
38 .. toctree::
37 :maxdepth: 1
39 :maxdepth: 1
38 :caption: Admin Documentation
40 :caption: Admin Documentation
39
41
40 install/quick-start
42 install/quick-start
41 install/install-database
43 install/install-database
42 install/install-steps
44 install/install-steps
43 admin/system-overview
45 admin/system-overview
44 nix/default-env
46 nix/default-env
45 admin/system-admin
47 admin/system-admin
46 admin/user-admin
48 admin/user-admin
47 admin/setting-repo-perms
49 admin/setting-repo-perms
48 admin/security-tips
50 admin/security-tips
49 auth/auth
51 auth/auth
50 issue-trackers/issue-trackers
52 issue-trackers/issue-trackers
51 admin/lab-settings
53 admin/lab-settings
52
54
53 .. toctree::
55 .. toctree::
54 :maxdepth: 1
56 :maxdepth: 1
55 :caption: Feature Documentation
57 :caption: Feature Documentation
56
58
57 collaboration/collaboration
59 collaboration/collaboration
58 collaboration/review-notifications
60 collaboration/review-notifications
59 collaboration/pull-requests
61 collaboration/pull-requests
60 code-review/code-review
62 code-review/code-review
61 integrations/integrations
63 integrations/integrations
62
64
63 .. toctree::
65 .. toctree::
64 :maxdepth: 1
66 :maxdepth: 1
65 :caption: Developer Documentation
67 :caption: Developer Documentation
66
68
67 api/api
69 api/api
68 tools/rhodecode-tools
70 tools/rhodecode-tools
69 extensions/extensions-hooks
71 extensions/extensions-hooks
70 contributing/contributing
72 contributing/contributing
71
73
72 .. toctree::
74 .. toctree::
73 :maxdepth: 1
75 :maxdepth: 1
74 :caption: User Documentation
76 :caption: User Documentation
75
77
76 usage/basic-usage
78 usage/basic-usage
77 tutorials/tutorials
79 tutorials/tutorials
78
80
79 .. toctree::
81 .. toctree::
80 :maxdepth: 1
82 :maxdepth: 1
81 :caption: About
83 :caption: About
82
84
83 known-issues/known-issues
85 known-issues/known-issues
84 release-notes/release-notes
86 release-notes/release-notes
85 admin/glossary
87 admin/glossary
@@ -1,52 +1,53 b''
1 .. _integrations:
1 .. _integrations:
2
2
3 Integrations
3 Integrations
4 ------------
4 ------------
5
5
6 Rhodecode supports integrations with external services for various events,
6 Rhodecode supports integrations with external services for various events,
7 such as commit pushes and pull requests. Multiple integrations of the same type
7 such as commit pushes and pull requests. Multiple integrations of the same type
8 can be added at the same time; this is useful for posting different events to
8 can be added at the same time; this is useful for posting different events to
9 different Slack channels, for example.
9 different Slack channels, for example.
10
10
11 Supported integrations
11 Supported integrations
12 ^^^^^^^^^^^^^^^^^^^^^^
12 ^^^^^^^^^^^^^^^^^^^^^^
13
13
14 ============================ ============ =====================================
14 ============================ ============ =====================================
15 Type/Name |RC| Edition Description
15 Type/Name |RC| Edition Description
16 ============================ ============ =====================================
16 ============================ ============ =====================================
17 :ref:`integrations-slack` |RCCEshort| https://slack.com/
17 :ref:`integrations-slack` |RCCEshort| https://slack.com/
18 :ref:`integrations-hipchat` |RCCEshort| https://www.hipchat.com/
18 :ref:`integrations-hipchat` |RCCEshort| https://www.hipchat.com/
19 :ref:`integrations-webhook` |RCCEshort| POST events as `json` to a custom url
19 :ref:`integrations-webhook` |RCCEshort| POST events as `json` to a custom url
20 :ref:`integrations-email` |RCEEshort| Send repo push commits by email
20 :ref:`integrations-email` |RCEEshort| Send repo push commits by email
21 :ref:`integrations-redmine` |RCEEshort| Close/Resolve/Reference redmine issues
21 :ref:`integrations-redmine` |RCEEshort| Close/Resolve/Reference redmine issues
22 :ref:`integrations-jira` |RCEEshort| Close/Resolve/Reference JIRA issues
22 :ref:`integrations-jira` |RCEEshort| Close/Resolve/Reference JIRA issues
23 ============================ ============ =====================================
23 ============================ ============ =====================================
24
24
25 .. _creating-integrations:
25 .. _creating-integrations:
26
26
27 Creating an Integration
27 Creating an Integration
28 ^^^^^^^^^^^^^^^^^^^^^^^
28 ^^^^^^^^^^^^^^^^^^^^^^^
29
29
30 Integrations can be added globally via the admin UI:
30 Integrations can be added globally via the admin UI:
31
31
32 :menuselection:`Admin --> Integrations`
32 :menuselection:`Admin --> Integrations`
33
33
34 or per repository in each repository's settings:
34 or per repository in each repository's settings:
35
35
36 :menuselection:`Admin --> Repositories --> Edit --> Integrations`
36 :menuselection:`Admin --> Repositories --> Edit --> Integrations`
37
37
38 To create an integration, select the type from the list in the *Create New
38 To create an integration, select the type from the list in the *Create New
39 Integration* section.
39 Integration* section.
40
40
41 The *Current Integrations* section shows existing integrations that have been
41 The *Current Integrations* section shows existing integrations that have been
42 created along with their type (eg. Slack) and enabled status.
42 created along with their type (eg. Slack) and enabled status.
43
43
44 See pages specific to each type of integration for more instructions:
44 See pages specific to each type of integration for more instructions:
45
45
46 .. toctree::
46 .. toctree::
47
47
48 slack
48 slack
49 hipchat
49 hipchat
50 redmine
50 redmine
51 jira
51 jira
52 webhook
52 webhook
53 email
@@ -1,12 +1,22 b''
1 .. _integrations-webhook:
1 .. _integrations-webhook:
2
2
3 Webhook integration
3 Webhook integration
4 ===================
4 ===================
5
5
6 The Webhook integration allows you to POST events such as repository pushes
6 The Webhook integration allows you to POST events such as repository pushes
7 or pull requests to a custom http endpoint as a json dict with details of the
7 or pull requests to a custom http endpoint as a json dict with details of the
8 event.
8 event.
9
9
10 Starting from 4.5.0 release, webhook integration allows to use variables
11 inside the URL. For example in URL `https://server-example.com/${repo_name}`
12 ${repo_name} will be replaced with the name of repository which events is
13 triggered from. Some of the variables like
14 `${branch}` will result in webhook be called multiple times when multiple
15 branches are pushed.
16
17 Some of the variables like `${pull_request_id}` will be replaced only in
18 the pull request related events.
19
10 To create a webhook integration, select "webhook" in the integration settings
20 To create a webhook integration, select "webhook" in the integration settings
11 and use the url and key from your custom webhook. See
21 and use the URL and key from your any previous custom webhook created. See
12 :ref:`creating-integrations` for additional instructions. No newline at end of file
22 :ref:`creating-integrations` for additional instructions.
@@ -1,121 +1,121 b''
1 |RCE| 4.3.0 |RNS|
1 |RCE| 4.3.0 |RNS|
2 -----------------
2 -----------------
3
3
4 Release Date
4 Release Date
5 ^^^^^^^^^^^^
5 ^^^^^^^^^^^^
6
6
7 - 2016-08-12
7 - 2016-08-12
8
8
9
9
10 General
11 ^^^^^^^
12
13 - Subversion: detect requests also based on magic path.
14 This adds subversion 1.9 support for SVN backend.
15 - Summary/changelog: unified how data is displayed for those pages.
16 * use consistent order of columns
17 * fix the link to commit status
18 * fix order of displaying comments
19 - Live-chat: refactor live chat system for code review based on
20 latest channelstream changes.
21 - SVN: Add template to generate the apache mod_dav_svn config for all
22 repository groups. Repository groups can now be automatically mapped to be
23 supported by SVN backend. Set `svn.proxy.generate_config = true` and similar
24 options found inside .ini config.
25 - Readme/markup: improved order of generating readme files. Fixes #4050
26 * we now use order based on default system renderer
27 * having multiple readme files will pick correct one as set renderer
28 - Api: add a max_file_bytes parameter to get_nodes so that large files
29 can be skipped.
30 - Auth-ldap: added flag to set debug mode for LDAP connections.
31 - Labs: moved rebase-merge option from labs settings into VCS settings.
32 - System: send platform type and version to upgrade endpoint when checking
33 for new versions.
34 - Packaging: update rhodecode-tools from 0.8.3 to 0.10.0
35 - Packaging: update codemirror from 5.4.0 to 5.11.0
36 - Packaging: updated pygments to 2.1.3
37 - Packaging: bumped supervisor to 3.3.0
38 - Packaging: bumped psycopg2 to 2.6.1
39 - Packaging: bumped mercurial to 3.8.4
40
41
42 New Features
10 New Features
43 ^^^^^^^^^^^^
11 ^^^^^^^^^^^^
44
12
45 - Integrations: created new event based integration framework.
13 - Integrations: created new event based integration framework.
46 Allows to configure global, or per repo: Slack, Hipchat, Webhooks, Email
14 Allows to configure global, or per repo: Slack, Hipchat, Webhooks, Email
47 integrations. This also deprecated usage of rcextensions for those.
15 integrations. This also deprecated usage of rcextensions for those.
48 - Integrations (EE only): added smart commits for Jira and Redmine with
16 - Integrations (EE only): added smart commits for Jira and Redmine with
49 ability to map keywords into issue tracker actions.
17 ability to map keywords into issue tracker actions.
50 `Fixes #123 -> resolves issues`, `Closes #123 -> closes issue` etc.
18 `Fixes #123 -> resolves issues`, `Closes #123 -> closes issue` etc.
51 - Markdown: added improved support for Github flavored markdown.
19 - Markdown: added improved support for Github flavored markdown.
52 - Labs: enable labs setting by default. Labs are new experimental features in
20 - Labs: enable labs setting by default. Labs are new experimental features in
53 RhodeCode that can be used to test new upcomming features.
21 RhodeCode that can be used to test new upcomming features.
54 - Api: Add api methods to get/set repository settings, implements #4021.
22 - Api: Add api methods to get/set repository settings, implements #4021.
55 - Gravatars: commit emails are now displayed based on the actual email
23 - Gravatars: commit emails are now displayed based on the actual email
56 used inside commit rather then the main one of associated account
24 used inside commit rather then the main one of associated account
57 inside RhodeCode, #4037.
25 inside RhodeCode, #4037.
58 - Emails: All emails got new styling. They look now consistent
26 - Emails: All emails got new styling. They look now consistent
59 to UI of application. We also added bunch of usefull information into
27 to UI of application. We also added bunch of usefull information into
60 email body, #4087.
28 email body, #4087.
61 - Pull requests: add show/hide comment functionality inside diffs, #4106.
29 - Pull requests: add show/hide comment functionality inside diffs, #4106.
62 - Notifications: added real-time notifications with via channelstream
30 - Notifications: added real-time notifications with via channelstream
63 about new comments when reviewing the code. Never miss someone replies
31 about new comments when reviewing the code. Never miss someone replies
64 onto comments you submitted while doing a code-review.
32 onto comments you submitted while doing a code-review.
65
33
66
34
35 General
36 ^^^^^^^
37
38 - Subversion: detect requests also based on magic path.
39 This adds subversion 1.9 support for SVN backend.
40 - Summary/changelog: unified how data is displayed for those pages.
41 * use consistent order of columns
42 * fix the link to commit status
43 * fix order of displaying comments
44 - Live chat: refactor live chat system for code review based on
45 latest channelstream changes.
46 - SVN: Add template to generate the apache mod_dav_svn config for all
47 repository groups. Repository groups can now be automatically mapped to be
48 supported by SVN backend. Set `svn.proxy.generate_config = true` and similar
49 options found inside .ini config.
50 - Readme/markup: improved order of generating readme files. Fixes #4050
51 * we now use order based on default system renderer
52 * having multiple readme files will pick correct one as set renderer
53 - Api: add a max_file_bytes parameter to get_nodes so that large files
54 can be skipped.
55 - Auth-ldap: added flag to set debug mode for LDAP connections.
56 - Labs: moved rebase-merge option from labs settings into VCS settings.
57 - System: send platform type and version to upgrade endpoint when checking
58 for new versions.
59 - Packaging: update rhodecode-tools from 0.8.3 to 0.10.0
60 - Packaging: update codemirror from 5.4.0 to 5.11.0
61 - Packaging: updated pygments to 2.1.3
62 - Packaging: bumped supervisor to 3.3.0
63 - Packaging: bumped psycopg2 to 2.6.1
64 - Packaging: bumped mercurial to 3.8.4
65
66
67 Security
67 Security
68 ^^^^^^^^
68 ^^^^^^^^
69
69
70 - Api: make `comment_commits` api call have consistent permissions
70 - Api: make `comment_commits` api call have consistent permissions
71 with web interface.
71 with web interface.
72 - Files: fixes display of "Add File" button missing or present despite
72 - Files: fixes display of "Add File" button missing or present despite
73 permissions, because of cached version of the page was rendered, fixes #4083.
73 permissions, because of cached version of the page was rendered, fixes #4083.
74 - Login/Registration: fixed flash message problem on login/registration
74 - Login/Registration: fixed flash message problem on login/registration
75 pages, fixes #4043.
75 pages, fixes #4043.
76 - Auth-token: allow other authentication types to use auth-token.
76 - Auth-token: allow other authentication types to use auth-token.
77 Accounts associated with other types like LDAP, or PAM can
77 Accounts associated with other types like LDAP, or PAM can
78 now use auth-tokens to authenticate via RhodeCode.
78 now use auth-tokens to authenticate via RhodeCode.
79
79
80
80
81 Performance
81 Performance
82 ^^^^^^^^^^^
82 ^^^^^^^^^^^
83
83
84 - Core: made all RhodeCode components gevent compatible. RhodeCode can now make
84 - Core: made all RhodeCode components gevent compatible. RhodeCode can now make
85 use of async workers. You can handle dozens of concurrent operations using a
85 use of async workers. You can handle dozens of concurrent operations using a
86 single worker. This works only with new HTTP backend.
86 single worker. This works only with new HTTP backend.
87 - Core: added new very efficient HTTP backend can be used to replace pyro4.
87 - Core: added new very efficient HTTP backend can be used to replace pyro4.
88 - Core: Set 'gzip_responses' to false by default. We no longer require any
88 - Core: Set 'gzip_responses' to false by default. We no longer require any
89 gzip computations on backed, thus speeding up large file transfers.
89 gzip computations on backed, thus speeding up large file transfers.
90 - UI: optimized events system for JavaScript to boost performance on
90 - UI: optimized events system for JavaScript to boost performance on
91 large html pages.
91 large html pages.
92 - VCS: moved VCSMiddleware up to pyramid layer as wrapper around pylons app.
92 - VCS: moved VCSMiddleware up to pyramid layer as wrapper around pylons app.
93 Skips few calls, and allows slightly faster clones/pulls and pushes.
93 Skips few calls, and allows slightly faster clones/pulls and pushes.
94
94
95
95
96 Fixes
96 Fixes
97 ^^^^^
97 ^^^^^
98
98
99 - VCS: add vcsserver cache invalidation to mercurial backend.
99 - VCS: add vcsserver cache invalidation to mercurial backend.
100 Fixes multi-process problems after Mercurial 3.8.X release with server
100 Fixes multi-process problems after Mercurial 3.8.X release with server
101 side merges.
101 side merges.
102 - VCS: clear caches on remap-and-rescan option.
102 - VCS: clear caches on remap-and-rescan option.
103 - VCS: improved logic of updating commit caches in cases of rebases.
103 - VCS: improved logic of updating commit caches in cases of rebases.
104 - Caches: Add an argument to make the cache context thread scoped. Brings
104 - Caches: Add an argument to make the cache context thread scoped. Brings
105 support to gevent compatible handling.
105 support to gevent compatible handling.
106 - Diff2way: fixed unicode problem on non-ascii files.
106 - Diff2way: fixed unicode problem on non-ascii files.
107 - Full text search: whoosh schema uses now bigger ints, fixes #4035
107 - Full text search: whoosh schema uses now bigger ints, fixes #4035
108 - File-browser: optimized cached tree calculation, reduced load times by
108 - File browser: optimized cached tree calculation, reduced load times by
109 50% on complex file trees.
109 50% on complex file trees.
110 - Styling: #4086 fixing bug where long commit messages did not wrap in file view.
110 - Styling: #4086 fixing bug where long commit messages did not wrap in file view.
111 - SVN: Ignore the content length header from response, fixes #4112.
111 - SVN: Ignore the content length header from response, fixes #4112.
112 Fixes the "svn: E120106: ra_serf: The server sent a truncated HTTP response body."
112 Fixes the "svn: E120106: ra_serf: The server sent a truncated HTTP response body."
113 - Auth: Fix password_changed function, fixes #4043.
113 - Auth: Fix password_changed function, fixes #4043.
114 - UI/tables: better message when tables are empty #685 #1832.
114 - UI/tables: better message when tables are empty #685 #1832.
115 - UX: put gravatar and username together in user list #3203.
115 - UX: put gravatar and username together in user list #3203.
116 - Gists: use colander schema to validate input data.
116 - Gists: use colander schema to validate input data.
117 * brings consistent validation acros API and web
117 * brings consistent validation acros API and web
118 * use nicer and stricter schemas to validate data
118 * use nicer and stricter schemas to validate data
119 * fixes #4118
119 * fixes #4118
120 - Appenlight: error reporting can now also report VCSMiddleware errors.
120 - Appenlight: error reporting can now also report VCSMiddleware errors.
121 - Users: hash email key for User.get_by_email() fixes #4132
121 - Users: hash email key for User.get_by_email() fixes #4132
@@ -1,15 +1,36 b''
1 |RCE| 4.3.1 |RNS|
1 |RCE| 4.3.1 |RNS|
2 -----------------
2 -----------------
3
3
4 Release Date
4 Release Date
5 ^^^^^^^^^^^^
5 ^^^^^^^^^^^^
6
6
7 - 2016-08-23
7 - 2016-08-23
8
8
9
10 New Features
11 ^^^^^^^^^^^^
12
13
14
15 General
16 ^^^^^^^
17
18
19
20 Security
21 ^^^^^^^^
22
23
24
25 Performance
26 ^^^^^^^^^^^
27
28
29
9 Fixes
30 Fixes
10 ^^^^^
31 ^^^^^
11
32
12 - Core: fixed database session cleanups. This will make sure RhodeCode can
33 - Core: fixed database session cleanups. This will make sure RhodeCode can
13 function correctly after database server problems. Fixes #4173, refs #4166
34 function correctly after database server problems. Fixes #4173, refs #4166
14 - Diffs: limit the file context to ~1mln lines. Fixes #4184, also make sure
35 - Diffs: limit the file context to ~1mln lines. Fixes #4184, also make sure
15 this doesn't trigger Integer overflow for msgpack. No newline at end of file
36 this doesn't trigger Integer overflow for msgpack.
@@ -1,78 +1,78 b''
1 |RCE| 4.4.0 |RNS|
1 |RCE| 4.4.0 |RNS|
2 -----------------
2 -----------------
3
3
4 Release Date
4 Release Date
5 ^^^^^^^^^^^^
5 ^^^^^^^^^^^^
6
6
7 - 2016-09-16
7 - 2016-09-16
8
8
9
9
10 General
11 ^^^^^^^
12
13 - UI: introduced Polymer webcomponents into core application. RhodeCode will
14 be now shipped together with Polymer framework webcomponents. Most of
15 dynamic UI components that require large amounts of interaction
16 will be done now with Polymer.
17 - live-notifications: use rhodecode-toast for live notifications instead of
18 toastr jquery plugin.
19 - Svn: moved svn http support out of labs settings. It's tested and stable now.
20
21
22 New Features
10 New Features
23 ^^^^^^^^^^^^
11 ^^^^^^^^^^^^
24
12
25 - Integrations: integrations can now be configure on whole repo group to apply
13 - Integrations: integrations can now be configure on whole repo group to apply
26 same integrations on multiple projects/groups at once.
14 same integrations on multiple projects/groups at once.
27 - Integrations: added scopes on integrations, scopes are: Global,
15 - Integrations: added scopes on integrations, scopes are: Global,
28 Repository Group (with/without children), Repositories, Root Repositories Only.
16 Repository Group (with/without children), Repositories, Root Repositories Only.
29 It will allow to configure exactly which projects use which integrations.
17 It will allow to configure exactly which projects use which integrations.
30 - Integrations: show branches/commits separately when posting push events
18 - Integrations: show branches/commits separately when posting push events
31 to hipchat/slack, fixes #4192.
19 to hipchat/slack, fixes #4192.
32 - Pull-requests: summary page now shows update dates for pull request to
20 - Pull requests: summary page now shows update dates for pull request to
33 easier see which one were receantly updated.
21 easier see which one were receantly updated.
34 - UI: hidden inline comments will be shown in side view when browsing the diffs
22 - UI: hidden inline comments will be shown in side view when browsing the diffs
35 - Diffs: added inline comments toggle into pull requests diff view. #2884
23 - Diffs: added inline comments toggle into pull requests diff view. #2884
36 - Live-chat: added summon reviewers functionality. You can now request
24 - Live chat: added summon reviewers functionality. You can now request
37 presence from online users into a chat for collaborative code-review.
25 presence from online users into a chat for collaborative code-review.
38 This requires channelstream to be enabled.
26 This requires channelstream to be enabled.
39 - UX: added a static 502 page for gateway error. Once configured via
27 - UX: added a static 502 page for gateway error. Once configured via
40 Nginx or Apache it will present a custom RhodeCode page while
28 Nginx or Apache it will present a custom RhodeCode page while
41 backend servers are offline. Fixes #4202.
29 backend servers are offline. Fixes #4202.
42
30
43
31
32 General
33 ^^^^^^^
34
35 - UI: introduced Polymer webcomponents into core application. RhodeCode will
36 be now shipped together with Polymer framework webcomponents. Most of
37 dynamic UI components that require large amounts of interaction
38 will be done now with Polymer.
39 - Live notifications: use rhodecode-toast for live notifications instead of
40 toastr jquery plugin.
41 - Svn: moved svn http support out of labs settings. It's tested and stable now.
42
43
44 Security
44 Security
45 ^^^^^^^^
45 ^^^^^^^^
46
46
47 - Passwords: forced password change will not allow users to put in the
47 - Passwords: forced password change will not allow users to put in the
48 old password as new one.
48 old password as new one.
49
49
50
50
51 Performance
51 Performance
52 ^^^^^^^^^^^
52 ^^^^^^^^^^^
53
53
54 - Vcs: refactor vcs-middleware to handle order of .ini file backends in
54 - Vcs: refactor vcs-middleware to handle order of .ini file backends in
55 detection of vcs protocol. Detection ends now on first match and speeds
55 detection of vcs protocol. Detection ends now on first match and speeds
56 overall transaction speed.
56 overall transaction speed.
57 - Summary: Improve the algorithm and performance of detection README files
57 - Summary: Improve the algorithm and performance of detection README files
58 inside summary page. In some cases we reduced cold-cache time from 50s to 1s.
58 inside summary page. In some cases we reduced cold-cache time from 50s to 1s.
59 - Safari: improved speed of large diffs on Safari browser.
59 - Safari: improved speed of large diffs on Safari browser.
60 - UX: remove position relative on diff td as it causes very slow
60 - UX: remove position relative on diff td as it causes very slow
61 rendering in browsers.
61 rendering in browsers.
62
62
63 Fixes
63 Fixes
64 ^^^^^
64 ^^^^^
65
65
66 - UX: change confirm password widget to have spacing between the fields to
66 - UX: change confirm password widget to have spacing between the fields to
67 match rest of ui, fixes: #4200.
67 match rest of ui, fixes: #4200.
68 - UX: show multiple tags/branches in changelog/summary instead of
68 - UX: show multiple tags/branches in changelog/summary instead of
69 truncating them.
69 truncating them.
70 - My-account: fix test notifications for IE10+
70 - My account: fix test notifications for IE10+
71 - Vcs: change way refs are retrieved for git so same name branch/tags and
71 - Vcs: change way refs are retrieved for git so same name branch/tags and
72 remotes can be supported, fixes #298.
72 remotes can be supported, fixes #298.
73 - Lexers: added small extensions table to extend syntax highlighting for file
73 - Lexers: added small extensions table to extend syntax highlighting for file
74 sources. Fixes #4227.
74 sources. Fixes #4227.
75 - Search: fix bug where file path link was wrong when the repository name was
75 - Search: fix bug where file path link was wrong when the repository name was
76 in the file path, fixes #4228
76 in the file path, fixes #4228
77 - Fixed INT overflow bug
77 - Pagination: fixed INT overflow bug.
78 - Events: send pushed commits always in the correct in order.
78 - Events: send pushed commits always in the correct in order.
@@ -1,40 +1,39 b''
1 |RCE| 4.4.1 |RNS|
1 |RCE| 4.4.1 |RNS|
2 -----------------
2 -----------------
3
3
4 Release Date
4 Release Date
5 ^^^^^^^^^^^^
5 ^^^^^^^^^^^^
6
6
7 - 2016-09-27
7 - 2016-09-27
8
8
9
9
10 New Features
11 ^^^^^^^^^^^^
12
13
10 General
14 General
11 ^^^^^^^
15 ^^^^^^^
12
16
13 - channelstream: auto-generate the url to channelstream server if it's not
17 - Channelstream: auto-generate the url to channelstream server if it's not
14 explicitly defined in the config. It allows to use a relative server
18 explicitly defined in the config. It allows to use a relative server
15 without knowing its address upfront.
19 without knowing its address upfront.
16
20
17
21
18 New Features
19 ^^^^^^^^^^^^
20
21
22
23 Security
22 Security
24 ^^^^^^^^
23 ^^^^^^^^
25
24
26
25
27
26
28 Performance
27 Performance
29 ^^^^^^^^^^^
28 ^^^^^^^^^^^
30
29
31
30
32
31
33 Fixes
32 Fixes
34 ^^^^^
33 ^^^^^
35
34
36 - GIT: properly extract branches on events and submit them to integrations.
35 - GIT: properly extract branches on events and submit them to integrations.
37 - Pullrequests: fix problems with unicode in auto-generated descriptions
36 - Pull requests: fix problems with unicode in auto-generated descriptions
38 - Gist: fixed bug in update functionality of Gists that auto changed them
37 - Gist: fixed bug in update functionality of Gists that auto changed them
39 to private.
38 to private.
40 - SVN: add proper escaping in the autogenerated svn mod_dav config
39 - SVN: add proper escaping in the autogenerated svn mod_dav config
@@ -1,41 +1,41 b''
1 |RCE| 4.4.2 |RNS|
1 |RCE| 4.4.2 |RNS|
2 -----------------
2 -----------------
3
3
4 Release Date
4 Release Date
5 ^^^^^^^^^^^^
5 ^^^^^^^^^^^^
6
6
7 - 2016-10-17
7 - 2016-10-17
8
8
9
9
10 General
11 ^^^^^^^
12
13 - packaging: pinned against rhodecode-tools 0.10.1
14
15
16 New Features
10 New Features
17 ^^^^^^^^^^^^
11 ^^^^^^^^^^^^
18
12
19
13
20
14
15 General
16 ^^^^^^^
17
18 - Packaging: pinned against rhodecode-tools 0.10.1
19
20
21 Security
21 Security
22 ^^^^^^^^
22 ^^^^^^^^
23
23
24 - integrations: fix 500 error on integrations page when delegated admin
24 - Integrations: fix 500 error on integrations page when delegated admin
25 tried to access integration page after adding some integrations.
25 tried to access integration page after adding some integrations.
26 Permission checks were to strict for delegated admins.
26 Permission checks were to strict for delegated admins.
27
27
28
28
29 Performance
29 Performance
30 ^^^^^^^^^^^
30 ^^^^^^^^^^^
31
31
32
32
33
33
34 Fixes
34 Fixes
35 ^^^^^
35 ^^^^^
36
36
37 - vcsserver: make sure we correctly ping against bundled HG/GIT/SVN binaries.
37 - Vcsserver: make sure we correctly ping against bundled HG/GIT/SVN binaries.
38 This should fix a problem where system binaries could be used accidentally
38 This should fix a problem where system binaries could be used accidentally
39 by the RhodeCode.
39 by the RhodeCode.
40 - ldap: fixed email extraction issues. Empty email addresses from LDAP server
40 - LDAP: fixed email extraction issues. Empty email addresses from LDAP server
41 will no longer take precedence over those stored inside RhodeCode database.
41 will no longer take precedence over those stored inside RhodeCode database.
@@ -1,89 +1,90 b''
1 .. _rhodecode-release-notes-ref:
1 .. _rhodecode-release-notes-ref:
2
2
3 Release Notes
3 Release Notes
4 =============
4 =============
5
5
6 |RCE| 4.x Versions
6 |RCE| 4.x Versions
7 ------------------
7 ------------------
8
8
9 .. toctree::
9 .. toctree::
10 :maxdepth: 1
10 :maxdepth: 1
11
11
12 release-notes-4.5.0.rst
12 release-notes-4.4.2.rst
13 release-notes-4.4.2.rst
13 release-notes-4.4.1.rst
14 release-notes-4.4.1.rst
14 release-notes-4.4.0.rst
15 release-notes-4.4.0.rst
15 release-notes-4.3.1.rst
16 release-notes-4.3.1.rst
16 release-notes-4.3.0.rst
17 release-notes-4.3.0.rst
17 release-notes-4.2.1.rst
18 release-notes-4.2.1.rst
18 release-notes-4.2.0.rst
19 release-notes-4.2.0.rst
19 release-notes-4.1.2.rst
20 release-notes-4.1.2.rst
20 release-notes-4.1.1.rst
21 release-notes-4.1.1.rst
21 release-notes-4.1.0.rst
22 release-notes-4.1.0.rst
22 release-notes-4.0.1.rst
23 release-notes-4.0.1.rst
23 release-notes-4.0.0.rst
24 release-notes-4.0.0.rst
24
25
25 |RCE| 3.x Versions
26 |RCE| 3.x Versions
26 ------------------
27 ------------------
27
28
28 .. toctree::
29 .. toctree::
29 :maxdepth: 1
30 :maxdepth: 1
30
31
31 release-notes-3.8.4.rst
32 release-notes-3.8.4.rst
32 release-notes-3.8.3.rst
33 release-notes-3.8.3.rst
33 release-notes-3.8.2.rst
34 release-notes-3.8.2.rst
34 release-notes-3.8.1.rst
35 release-notes-3.8.1.rst
35 release-notes-3.8.0.rst
36 release-notes-3.8.0.rst
36 release-notes-3.7.1.rst
37 release-notes-3.7.1.rst
37 release-notes-3.7.0.rst
38 release-notes-3.7.0.rst
38 release-notes-3.6.1.rst
39 release-notes-3.6.1.rst
39 release-notes-3.6.0.rst
40 release-notes-3.6.0.rst
40 release-notes-3.5.2.rst
41 release-notes-3.5.2.rst
41 release-notes-3.5.1.rst
42 release-notes-3.5.1.rst
42 release-notes-3.5.0.rst
43 release-notes-3.5.0.rst
43 release-notes-3.4.1.rst
44 release-notes-3.4.1.rst
44 release-notes-3.4.0.rst
45 release-notes-3.4.0.rst
45 release-notes-3.3.4.rst
46 release-notes-3.3.4.rst
46 release-notes-3.3.3.rst
47 release-notes-3.3.3.rst
47 release-notes-3.3.2.rst
48 release-notes-3.3.2.rst
48 release-notes-3.3.1.rst
49 release-notes-3.3.1.rst
49 release-notes-3.3.0.rst
50 release-notes-3.3.0.rst
50 release-notes-3.2.3.rst
51 release-notes-3.2.3.rst
51 release-notes-3.2.2.rst
52 release-notes-3.2.2.rst
52 release-notes-3.2.1.rst
53 release-notes-3.2.1.rst
53 release-notes-3.2.0.rst
54 release-notes-3.2.0.rst
54 release-notes-3.1.1.rst
55 release-notes-3.1.1.rst
55 release-notes-3.1.0.rst
56 release-notes-3.1.0.rst
56 release-notes-3.0.2.rst
57 release-notes-3.0.2.rst
57 release-notes-3.0.1.rst
58 release-notes-3.0.1.rst
58 release-notes-3.0.0.rst
59 release-notes-3.0.0.rst
59
60
60 |RCE| 2.x Versions
61 |RCE| 2.x Versions
61 ------------------
62 ------------------
62
63
63 .. toctree::
64 .. toctree::
64 :maxdepth: 1
65 :maxdepth: 1
65
66
66 release-notes-2.2.8.rst
67 release-notes-2.2.8.rst
67 release-notes-2.2.7.rst
68 release-notes-2.2.7.rst
68 release-notes-2.2.6.rst
69 release-notes-2.2.6.rst
69 release-notes-2.2.5.rst
70 release-notes-2.2.5.rst
70 release-notes-2.2.4.rst
71 release-notes-2.2.4.rst
71 release-notes-2.2.3.rst
72 release-notes-2.2.3.rst
72 release-notes-2.2.2.rst
73 release-notes-2.2.2.rst
73 release-notes-2.2.1.rst
74 release-notes-2.2.1.rst
74 release-notes-2.2.0.rst
75 release-notes-2.2.0.rst
75 release-notes-2.1.0.rst
76 release-notes-2.1.0.rst
76 release-notes-2.0.2.rst
77 release-notes-2.0.2.rst
77 release-notes-2.0.1.rst
78 release-notes-2.0.1.rst
78 release-notes-2.0.0.rst
79 release-notes-2.0.0.rst
79
80
80 |RCE| 1.x Versions
81 |RCE| 1.x Versions
81 ------------------
82 ------------------
82
83
83 .. toctree::
84 .. toctree::
84 :maxdepth: 1
85 :maxdepth: 1
85
86
86 release-notes-1.7.2.rst
87 release-notes-1.7.2.rst
87 release-notes-1.7.1.rst
88 release-notes-1.7.1.rst
88 release-notes-1.7.0.rst
89 release-notes-1.7.0.rst
89 release-notes-1.6.0.rst
90 release-notes-1.6.0.rst
@@ -1,61 +1,64 b''
1 .. _scaling-tips:
1 .. _scaling-tips:
2
2
3 ======================
3 ======================
4 Scaling Best Practices
4 Scaling Best Practices
5 ======================
5 ======================
6
6
7 When deploying |RCE| at scale; 100s of users, multiple instances, CI servers,
7 When deploying |RCE| at scale; 1000s of users, multiple instances, CI servers,
8 there are a number of steps you can take to ensure you are getting the
8 there are a number of steps you can take to ensure you are getting the
9 most out of your system.
9 most out of your system.
10
10
11 Separate Users and CI Servers
11 Separate Users and CI Servers
12 -----------------------------
12 -----------------------------
13
13
14 You can configure multiple |RCE| instances to point to the same database and
14 You can configure multiple |RCE| instances to point to the same database and
15 set of |repos|. This lets users work on an instance that has less traffic
15 set of |repos|. This lets users work on an instance that has less traffic
16 than those being hit by CI servers. To configure this, use |RCC| to install
16 than those being hit by CI servers. To configure this, use |RCC| to install
17 multiple instances and configure the database and |repos| connection. If you
17 multiple instances and configure the database and |repos| connection. If you
18 do need to reset the database connection, see the
18 do need to reset/adjust the database connection, see the
19 :ref:`config-database` section.
19 :ref:`config-database` section.
20
20
21 Once configured, set your CI servers to use a particular instance and for
21 You can configure then a load-balancer to balance the traffic between the CI
22 user specific instances you can configure loads balancing. See the
22 dedicated instance and instance that end users would use.
23 :ref:`nginx-ws-ref` section for examples.
23 See the :ref:`nginx-ws-ref` section for examples on how to do it in NGINX.
24
24
25 Switch to Database Sessions
25 Switch to Database Sessions
26 ---------------------------
26 ---------------------------
27
27
28 To increase database performance switch to database-based user sessions. In a
28 To increase |RCE| performance switch from the default file based sessions to
29 large scale deployment, we recommend switching from file-based
29 database-based. In such way all your distributed instances would not need to
30 sessions to database-based user sessions. For configuration details, see the
30 share the file storage to use file-based sessions.
31 :ref:`db-session-ref` section.
31 Database based session have an additional advantage of the file
32 based ones that they don't need a periodic cleanup as the session library
33 cleans them up for users. For configuration details,
34 see the :ref:`db-session-ref` section.
32
35
33 Tuning |RCE|
36 Tuning |RCE|
34 ------------
37 ------------
35
38
36 There are also a number of options available to tune |RCE| for certain
39 There are also a number of options available to tune |RCE| for certain
37 scenarios, including memory cache size. See the :ref:`rhodecode-tuning-ref`
40 scenarios, including memory cache size. See the :ref:`rhodecode-tuning-ref`
38 section.
41 section.
39
42
40 Use Authentication Tokens
43 Use Authentication Tokens
41 -------------------------
44 -------------------------
42
45
43 Set up a user account for external services, and then use Authentication
46 Set up a user account for external services, and then use Authentication
44 Tokens with those external services. These tokens work with
47 Tokens with those external services. These tokens work with
45 push/pull operations only, and you can manage multiple tokens through this user
48 push/pull operations only, and you can manage multiple tokens through this user
46 account, and revoke particular ones if necessary. In this way one user can have
49 account, and revoke particular ones if necessary. In this way one user can have
47 multiple tokens, so all your jenkins/CI servers could share one account.
50 multiple tokens, so all your jenkins/CI servers could share one account.
48
51
49 * To enable tokens, go to :menuselection:`Admin --> Authentication` and enable
52 * To enable tokens, go to :menuselection:`Admin --> Authentication` and enable
50 the `rhodecode.lib.auth_modules.auth_token` library.
53 the `rhodecode.lib.auth_modules.auth_token` library.
51
54
52 * To create tokens, go to
55 * To create tokens, go to
53 :menuselection:`Username --> My Account --> Auth tokens` and generate the
56 :menuselection:`Username --> My Account --> Auth tokens` and generate the
54 necessary tokens. For more information, see the :ref:`config-token-ref`
57 necessary tokens. For more information, see the :ref:`config-token-ref`
55 section.
58 section.
56
59
57 Scaling Deployment Diagram
60 Scaling Deployment Diagram
58 --------------------------
61 --------------------------
59
62
60 .. image:: ../images/scaling-diagrm.png
63 .. image:: ../images/scaling-diagrm.png
61 :align: center
64 :align: center
@@ -1,186 +1,190 b''
1 {
1 {
2 "dirs": {
2 "dirs": {
3 "css": {
3 "css": {
4 "src":"rhodecode/public/css",
4 "src":"rhodecode/public/css",
5 "dest":"rhodecode/public/css"
5 "dest":"rhodecode/public/css"
6 },
6 },
7 "js": {
7 "js": {
8 "src": "rhodecode/public/js/src",
8 "src": "rhodecode/public/js/src",
9 "dest": "rhodecode/public/js"
9 "dest": "rhodecode/public/js",
10 "bower": "bower_components",
11 "node_modules": "node_modules"
10 }
12 }
11 },
13 },
12 "copy": {
14 "copy": {
13 "main": {
15 "main": {
14 "expand": true,
16 "expand": true,
15 "cwd": "bower_components",
17 "cwd": "bower_components",
16 "src": "webcomponentsjs/webcomponents-lite.js",
18 "src": "webcomponentsjs/webcomponents-lite.js",
17 "dest": "<%= dirs.js.dest %>/vendors"
19 "dest": "<%= dirs.js.dest %>/vendors"
18 }
20 }
19 },
21 },
20 "concat": {
22 "concat": {
21 "polymercss": {
23 "polymercss": {
22 "src": [
24 "src": [
23 "<%= dirs.js.src %>/components/root-styles-prefix.html",
25 "<%= dirs.js.src %>/components/root-styles-prefix.html",
24 "<%= dirs.css.src %>/style-polymer.css",
26 "<%= dirs.css.src %>/style-polymer.css",
25 "<%= dirs.js.src %>/components/root-styles-suffix.html"
27 "<%= dirs.js.src %>/components/root-styles-suffix.html"
26 ],
28 ],
27 "dest": "<%= dirs.js.dest %>/src/components/root-styles.gen.html",
29 "dest": "<%= dirs.js.dest %>/src/components/root-styles.gen.html",
28 "nonull": true
30 "nonull": true
29 },
31 },
30 "dist": {
32 "dist": {
31 "src": [
33 "src": [
32 "<%= dirs.js.src %>/jquery-1.11.1.min.js",
34 "<%= dirs.js.src %>/jquery-1.11.1.min.js",
33 "<%= dirs.js.src %>/logging.js",
35 "<%= dirs.js.src %>/logging.js",
34 "<%= dirs.js.src %>/bootstrap.js",
36 "<%= dirs.js.src %>/bootstrap.js",
35 "<%= dirs.js.src %>/mousetrap.js",
37 "<%= dirs.js.src %>/mousetrap.js",
36 "<%= dirs.js.src %>/moment.js",
38 "<%= dirs.js.src %>/moment.js",
37 "<%= dirs.js.src %>/appenlight-client-0.4.1.min.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",
38 "<%= dirs.js.src %>/i18n_utils.js",
41 "<%= dirs.js.src %>/i18n_utils.js",
39 "<%= dirs.js.src %>/deform.js",
42 "<%= dirs.js.src %>/deform.js",
40 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
43 "<%= dirs.js.src %>/plugins/jquery.pjax.js",
41 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
44 "<%= dirs.js.src %>/plugins/jquery.dataTables.js",
42 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
45 "<%= dirs.js.src %>/plugins/flavoured_checkbox.js",
43 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
46 "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js",
44 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
47 "<%= dirs.js.src %>/plugins/jquery.autocomplete.js",
45 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
48 "<%= dirs.js.src %>/plugins/jquery.debounce.js",
46 "<%= dirs.js.src %>/plugins/jquery.mark.js",
49 "<%= dirs.js.src %>/plugins/jquery.mark.js",
47 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
50 "<%= dirs.js.src %>/plugins/jquery.timeago.js",
48 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
51 "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js",
49 "<%= dirs.js.src %>/select2/select2.js",
52 "<%= dirs.js.src %>/select2/select2.js",
50 "<%= dirs.js.src %>/codemirror/codemirror.js",
53 "<%= dirs.js.src %>/codemirror/codemirror.js",
51 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
54 "<%= dirs.js.src %>/codemirror/codemirror_loadmode.js",
52 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
55 "<%= dirs.js.src %>/codemirror/codemirror_hint.js",
53 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
56 "<%= dirs.js.src %>/codemirror/codemirror_overlay.js",
54 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
57 "<%= dirs.js.src %>/codemirror/codemirror_placeholder.js",
55 "<%= dirs.js.dest %>/mode/meta.js",
58 "<%= dirs.js.dest %>/mode/meta.js",
56 "<%= dirs.js.dest %>/mode/meta_ext.js",
59 "<%= dirs.js.dest %>/mode/meta_ext.js",
57 "<%= dirs.js.dest %>/rhodecode/i18n/select2/translations.js",
60 "<%= dirs.js.dest %>/rhodecode/i18n/select2/translations.js",
58 "<%= dirs.js.src %>/rhodecode/utils/array.js",
61 "<%= dirs.js.src %>/rhodecode/utils/array.js",
59 "<%= dirs.js.src %>/rhodecode/utils/string.js",
62 "<%= dirs.js.src %>/rhodecode/utils/string.js",
60 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
63 "<%= dirs.js.src %>/rhodecode/utils/pyroutes.js",
61 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
64 "<%= dirs.js.src %>/rhodecode/utils/ajax.js",
62 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
65 "<%= dirs.js.src %>/rhodecode/utils/autocomplete.js",
63 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
66 "<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js",
64 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
67 "<%= dirs.js.src %>/rhodecode/utils/ie.js",
65 "<%= dirs.js.src %>/rhodecode/utils/os.js",
68 "<%= dirs.js.src %>/rhodecode/utils/os.js",
66 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
69 "<%= dirs.js.src %>/rhodecode/utils/topics.js",
67 "<%= dirs.js.src %>/rhodecode/widgets/multiselect.js",
68 "<%= dirs.js.src %>/rhodecode/init.js",
70 "<%= dirs.js.src %>/rhodecode/init.js",
69 "<%= dirs.js.src %>/rhodecode/codemirror.js",
71 "<%= dirs.js.src %>/rhodecode/codemirror.js",
70 "<%= dirs.js.src %>/rhodecode/comments.js",
72 "<%= dirs.js.src %>/rhodecode/comments.js",
71 "<%= dirs.js.src %>/rhodecode/constants.js",
73 "<%= dirs.js.src %>/rhodecode/constants.js",
72 "<%= dirs.js.src %>/rhodecode/files.js",
74 "<%= dirs.js.src %>/rhodecode/files.js",
73 "<%= dirs.js.src %>/rhodecode/followers.js",
75 "<%= dirs.js.src %>/rhodecode/followers.js",
74 "<%= dirs.js.src %>/rhodecode/menus.js",
76 "<%= dirs.js.src %>/rhodecode/menus.js",
75 "<%= dirs.js.src %>/rhodecode/notifications.js",
77 "<%= dirs.js.src %>/rhodecode/notifications.js",
76 "<%= dirs.js.src %>/rhodecode/permissions.js",
78 "<%= dirs.js.src %>/rhodecode/permissions.js",
77 "<%= dirs.js.src %>/rhodecode/pjax.js",
79 "<%= dirs.js.src %>/rhodecode/pjax.js",
78 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
80 "<%= dirs.js.src %>/rhodecode/pullrequests.js",
79 "<%= dirs.js.src %>/rhodecode/settings.js",
81 "<%= dirs.js.src %>/rhodecode/settings.js",
80 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
82 "<%= dirs.js.src %>/rhodecode/select2_widgets.js",
81 "<%= dirs.js.src %>/rhodecode/tooltips.js",
83 "<%= dirs.js.src %>/rhodecode/tooltips.js",
82 "<%= dirs.js.src %>/rhodecode/users.js",
84 "<%= dirs.js.src %>/rhodecode/users.js",
83 "<%= dirs.js.src %>/rhodecode/appenlight.js",
85 "<%= dirs.js.src %>/rhodecode/appenlight.js",
84 "<%= dirs.js.src %>/rhodecode.js"
86 "<%= dirs.js.src %>/rhodecode.js"
85 ],
87 ],
86 "dest": "<%= dirs.js.dest %>/scripts.js",
88 "dest": "<%= dirs.js.dest %>/scripts.js",
87 "nonull": true
89 "nonull": true
88 }
90 }
89 },
91 },
90 "crisper": {
92 "crisper": {
91 "dist": {
93 "dist": {
92 "options": {
94 "options": {
93 "cleanup": false,
95 "cleanup": false,
94 "onlySplit": true
96 "onlySplit": true
95 },
97 },
96 "src": "<%= dirs.js.dest %>/rhodecode-components.html",
98 "src": "<%= dirs.js.dest %>/rhodecode-components.html",
97 "dest": "<%= dirs.js.dest %>/rhodecode-components.js"
99 "dest": "<%= dirs.js.dest %>/rhodecode-components.js"
98 }
100 }
99 },
101 },
100 "less": {
102 "less": {
101 "development": {
103 "development": {
102 "options": {
104 "options": {
103 "compress": false,
105 "compress": false,
104 "yuicompress": false,
106 "yuicompress": false,
105 "optimization": 0
107 "optimization": 0
106 },
108 },
107 "files": {
109 "files": {
108 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
110 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
109 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
111 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
110 }
112 }
111 },
113 },
112 "production": {
114 "production": {
113 "options": {
115 "options": {
114 "compress": true,
116 "compress": true,
115 "yuicompress": true,
117 "yuicompress": true,
116 "optimization": 2
118 "optimization": 2
117 },
119 },
118 "files": {
120 "files": {
119 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
121 "<%= dirs.css.dest %>/style.css": "<%= dirs.css.src %>/main.less",
120 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
122 "<%= dirs.css.dest %>/style-polymer.css": "<%= dirs.css.src %>/polymer.less"
121 }
123 }
122 },
124 },
123 "components": {
125 "components": {
124 "files": [
126 "files": [
125 {
127 {
126 "cwd": "<%= dirs.js.src %>/components/",
128 "cwd": "<%= dirs.js.src %>/components/",
127 "dest": "<%= dirs.js.src %>/components/",
129 "dest": "<%= dirs.js.src %>/components/",
128 "src": [
130 "src": [
129 "**/*.less"
131 "**/*.less"
130 ],
132 ],
131 "expand": true,
133 "expand": true,
132 "ext": ".css"
134 "ext": ".css"
133 }
135 }
134 ]
136 ]
135 }
137 }
136 },
138 },
137 "watch": {
139 "watch": {
138 "less": {
140 "less": {
139 "files": [
141 "files": [
140 "<%= dirs.css.src %>/**/*.less",
142 "<%= dirs.css.src %>/**/*.less",
141 "<%= dirs.js.src %>/components/**/*.less"
143 "<%= dirs.js.src %>/components/**/*.less"
142 ],
144 ],
143 "tasks": [
145 "tasks": [
144 "less:development",
146 "less:development",
145 "less:components",
147 "less:components",
146 "concat:polymercss",
148 "concat:polymercss",
147 "vulcanize"
149 "vulcanize",
150 "crisper",
151 "concat:dist"
148 ]
152 ]
149 },
153 },
150 "js": {
154 "js": {
151 "files": [
155 "files": [
152 "!<%= dirs.js.src %>/components/root-styles.gen.html",
156 "!<%= dirs.js.src %>/components/root-styles.gen.html",
153 "<%= dirs.js.src %>/**/*.js",
157 "<%= dirs.js.src %>/**/*.js",
154 "<%= dirs.js.src %>/components/**/*.html"
158 "<%= dirs.js.src %>/components/**/*.html"
155 ],
159 ],
156 "tasks": [
160 "tasks": [
157 "less:components",
161 "less:components",
158 "concat:polymercss",
162 "concat:polymercss",
159 "vulcanize",
163 "vulcanize",
160 "crisper",
164 "crisper",
161 "concat:dist"
165 "concat:dist"
162 ]
166 ]
163 }
167 }
164 },
168 },
165 "jshint": {
169 "jshint": {
166 "rhodecode": {
170 "rhodecode": {
167 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
171 "src": "<%= dirs.js.src %>/rhodecode/**/*.js",
168 "options": {
172 "options": {
169 "jshintrc": ".jshintrc"
173 "jshintrc": ".jshintrc"
170 }
174 }
171 }
175 }
172 },
176 },
173 "vulcanize": {
177 "vulcanize": {
174 "default": {
178 "default": {
175 "options": {
179 "options": {
176 "abspath": "",
180 "abspath": "",
177 "inlineScripts": true,
181 "inlineScripts": true,
178 "inlineCss": true,
182 "inlineCss": true,
179 "stripComments": true
183 "stripComments": true
180 },
184 },
181 "files": {
185 "files": {
182 "<%= dirs.js.dest %>/rhodecode-components.html": "<%= dirs.js.src %>/components/shared-components.html"
186 "<%= dirs.js.dest %>/rhodecode-components.html": "<%= dirs.js.src %>/components/shared-components.html"
183 }
187 }
184 }
188 }
185 }
189 }
186 }
190 }
@@ -1,18 +1,20 b''
1 {
1 {
2 "name": "rhodecode-enterprise",
2 "name": "rhodecode-enterprise",
3 "version": "0.0.1",
3 "version": "0.0.1",
4 "devDependencies": {
4 "devDependencies": {
5 "grunt": "^0.4.5",
5 "grunt": "^0.4.5",
6 "grunt-contrib-copy": "^1.0.0",
6 "grunt-contrib-copy": "^1.0.0",
7 "grunt-contrib-concat": "^0.5.1",
7 "grunt-contrib-concat": "^0.5.1",
8 "grunt-contrib-jshint": "^0.12.0",
8 "grunt-contrib-jshint": "^0.12.0",
9 "grunt-contrib-less": "^1.1.0",
9 "grunt-contrib-less": "^1.1.0",
10 "grunt-contrib-watch": "^0.6.1",
10 "grunt-contrib-watch": "^0.6.1",
11 "crisper": "^2.0.2",
11 "crisper": "^2.0.2",
12 "vulcanize": "^1.14.8",
12 "vulcanize": "^1.14.8",
13 "grunt-crisper": "^1.0.1",
13 "grunt-crisper": "^1.0.1",
14 "grunt-vulcanize": "^1.0.0",
14 "grunt-vulcanize": "^1.0.0",
15 "jshint": "^2.9.1-rc3",
15 "jshint": "^2.9.1-rc3",
16 "bower": "^1.7.9"
16 "bower": "^1.7.9",
17 "favico.js": "^0.3.10",
18 "appenlight-client": "git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.0"
17 }
19 }
18 }
20 }
@@ -1,31 +1,33 b''
1 { fetchbower, buildEnv }:
1 { fetchbower, buildEnv }:
2 buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
2 buildEnv { name = "bower-env"; ignoreCollisions = true; paths = [
3 (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "0ggh3k8ssafd056ib1m5bvzi7cpz3ry7gr5176d79na1w0c3i7dz")
3 (fetchbower "webcomponentsjs" "0.7.22" "^0.7.22" "0ggh3k8ssafd056ib1m5bvzi7cpz3ry7gr5176d79na1w0c3i7dz")
4 (fetchbower "polymer" "Polymer/polymer#1.6.1" "Polymer/polymer#^1.6.1" "09mm0jgk457gvwqlc155swch7gjr6fs3g7spnvhi6vh5b6518540")
4 (fetchbower "polymer" "Polymer/polymer#1.6.1" "Polymer/polymer#^1.6.1" "09mm0jgk457gvwqlc155swch7gjr6fs3g7spnvhi6vh5b6518540")
5 (fetchbower "paper-button" "PolymerElements/paper-button#1.0.13" "PolymerElements/paper-button#^1.0.13" "0i3y153nqk06pn0gk282vyybnl3g1w3w41d5i9z659cgn27g3fvm")
5 (fetchbower "paper-button" "PolymerElements/paper-button#1.0.13" "PolymerElements/paper-button#^1.0.13" "0i3y153nqk06pn0gk282vyybnl3g1w3w41d5i9z659cgn27g3fvm")
6 (fetchbower "paper-spinner" "PolymerElements/paper-spinner#1.2.0" "PolymerElements/paper-spinner#^1.2.0" "1av1m6y81jw3hjhz1yqy3rwcgxarjzl58ldfn4q6sn51pgzngfqb")
6 (fetchbower "paper-spinner" "PolymerElements/paper-spinner#1.2.0" "PolymerElements/paper-spinner#^1.2.0" "1av1m6y81jw3hjhz1yqy3rwcgxarjzl58ldfn4q6sn51pgzngfqb")
7 (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1.2" "PolymerElements/paper-tooltip#^1.1.2" "1j64nprcyk2d2bbl3qwjyr0lbjngm4wclpyfwgai1c4y6g6bigd2")
7 (fetchbower "paper-tooltip" "PolymerElements/paper-tooltip#1.1.3" "PolymerElements/paper-tooltip#^1.1.2" "0vmrm1n8k9sk9nvqy03q177axy22pia6i3j1gxbk72j3pqiqvg6k")
8 (fetchbower "paper-toast" "PolymerElements/paper-toast#1.3.0" "PolymerElements/paper-toast#^1.3.0" "0x9rqxsks5455s8pk4aikpp99ijdn6kxr9gvhwh99nbcqdzcxq1m")
8 (fetchbower "paper-toast" "PolymerElements/paper-toast#1.3.0" "PolymerElements/paper-toast#^1.3.0" "0x9rqxsks5455s8pk4aikpp99ijdn6kxr9gvhwh99nbcqdzcxq1m")
9 (fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#1.2.0" "PolymerElements/paper-toggle-button#^1.2.0" "0mphcng3ngspbpg4jjn0mb91nvr4xc1phq3qswib15h6sfww1b2w")
9 (fetchbower "paper-toggle-button" "PolymerElements/paper-toggle-button#1.2.0" "PolymerElements/paper-toggle-button#^1.2.0" "0mphcng3ngspbpg4jjn0mb91nvr4xc1phq3qswib15h6sfww1b2w")
10 (fetchbower "iron-ajax" "PolymerElements/iron-ajax#1.4.3" "PolymerElements/iron-ajax#^1.4.3" "0m3dx27arwmlcp00b7n516sc5a51f40p9vapr1nvd57l3i3z0pzm")
10 (fetchbower "iron-ajax" "PolymerElements/iron-ajax#1.4.3" "PolymerElements/iron-ajax#^1.4.3" "0m3dx27arwmlcp00b7n516sc5a51f40p9vapr1nvd57l3i3z0pzm")
11 (fetchbower "iron-autogrow-textarea" "PolymerElements/iron-autogrow-textarea#1.0.13" "PolymerElements/iron-autogrow-textarea#^1.0.13" "0zwhpl97vii1s8k0lgain8i9dnw29b0mxc5ixdscx9las13n2lqq")
12 (fetchbower "iron-a11y-keys" "PolymerElements/iron-a11y-keys#1.0.6" "PolymerElements/iron-a11y-keys#^1.0.6" "1xz3mgghfcxixq28sdb654iaxj4nyi1bzcwf77ydkms6fviqs9mv")
11 (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl")
13 (fetchbower "iron-flex-layout" "PolymerElements/iron-flex-layout#1.3.1" "PolymerElements/iron-flex-layout#^1.0.0" "0nswv3ih3bhflgcd2wjfmddqswzgqxb2xbq65jk9w3rkj26hplbl")
12 (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8")
14 (fetchbower "paper-behaviors" "PolymerElements/paper-behaviors#1.0.12" "PolymerElements/paper-behaviors#^1.0.0" "012bqk97awgz55cn7rm9g7cckrdhkqhls3zvp8l6nd4rdwcrdzq8")
13 (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh")
15 (fetchbower "paper-material" "PolymerElements/paper-material#1.0.6" "PolymerElements/paper-material#^1.0.0" "0rljmknfdbm5aabvx9pk77754zckj3l127c3mvnmwkpkkr353xnh")
14 (fetchbower "paper-styles" "PolymerElements/paper-styles#1.1.4" "PolymerElements/paper-styles#^1.0.0" "0j8vg74xrcxlni8i93dsab3y80f34kk30lv4yblqpkp9c3nrilf7")
16 (fetchbower "paper-styles" "PolymerElements/paper-styles#1.1.4" "PolymerElements/paper-styles#^1.0.0" "0j8vg74xrcxlni8i93dsab3y80f34kk30lv4yblqpkp9c3nrilf7")
15 (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.4" "PolymerElements/neon-animation#^1.0.0" "16mz9i2n5w0k5j8d6gha23cnbdgm5syz3fawyh89gdbq97bi2q5j")
17 (fetchbower "neon-animation" "PolymerElements/neon-animation#1.2.4" "PolymerElements/neon-animation#^1.0.0" "16mz9i2n5w0k5j8d6gha23cnbdgm5syz3fawyh89gdbq97bi2q5j")
16 (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d")
18 (fetchbower "iron-a11y-announcer" "PolymerElements/iron-a11y-announcer#1.0.5" "PolymerElements/iron-a11y-announcer#^1.0.0" "0n7c7j1pwk3835s7s2jd9125wdcsqf216yi5gj07wn5s8h8p7m9d")
17 (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#1.8.6" "PolymerElements/iron-overlay-behavior#^1.0.9" "14brn9gz6qqskarg3fxk91xs7vg02vgcsz9a9743kidxr0l0413m")
19 (fetchbower "iron-overlay-behavior" "PolymerElements/iron-overlay-behavior#1.8.6" "PolymerElements/iron-overlay-behavior#^1.0.9" "14brn9gz6qqskarg3fxk91xs7vg02vgcsz9a9743kidxr0l0413m")
18 (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf")
20 (fetchbower "iron-fit-behavior" "PolymerElements/iron-fit-behavior#1.2.5" "PolymerElements/iron-fit-behavior#^1.1.0" "1msnlh8lp1xg6v4h6dkjwj9kzac5q5q208ayla3x9hi483ki6rlf")
19 (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#1.0.5" "PolymerElements/iron-checked-element-behavior#^1.0.0" "0l0yy4ah454s8bzfv076s8by7h67zy9ni6xb932qwyhx8br6c1m7")
21 (fetchbower "iron-checked-element-behavior" "PolymerElements/iron-checked-element-behavior#1.0.5" "PolymerElements/iron-checked-element-behavior#^1.0.0" "0l0yy4ah454s8bzfv076s8by7h67zy9ni6xb932qwyhx8br6c1m7")
20 (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb")
22 (fetchbower "promise-polyfill" "polymerlabs/promise-polyfill#1.0.1" "polymerlabs/promise-polyfill#^1.0.0" "045bj2caav3famr5hhxgs1dx7n08r4s46mlzwb313vdy17is38xb")
21 (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#1.0.17" "PolymerElements/iron-behaviors#^1.0.0" "021qvkmbk32jrrmmphpmwgby4bzi5jyf47rh1bxmq2ip07ly4bpr")
23 (fetchbower "iron-behaviors" "PolymerElements/iron-behaviors#1.0.17" "PolymerElements/iron-behaviors#^1.0.0" "021qvkmbk32jrrmmphpmwgby4bzi5jyf47rh1bxmq2ip07ly4bpr")
24 (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv")
25 (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.6" "PolymerElements/iron-form-element-behavior#^1.0.0" "0rdhxivgkdhhz2yadgdbjfc70l555p3y83vjh8rfj5hr0asyn6q1")
26 (fetchbower "iron-a11y-keys-behavior" "polymerelements/iron-a11y-keys-behavior#1.1.9" "polymerelements/iron-a11y-keys-behavior#^1.0.0" "1imm4gc84qizihhbyhfa8lwjh3myhj837f79i5m04xjgwrjmkaf6")
22 (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns")
27 (fetchbower "paper-ripple" "PolymerElements/paper-ripple#1.0.8" "PolymerElements/paper-ripple#^1.0.0" "0r9sq8ik7wwrw0qb82c3rw0c030ljwd3s466c9y4qbcrsbvfjnns")
23 (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj")
28 (fetchbower "font-roboto" "PolymerElements/font-roboto#1.0.1" "PolymerElements/font-roboto#^1.0.1" "02jz43r0wkyr3yp7rq2rc08l5cwnsgca9fr54sr4rhsnl7cjpxrj")
24 (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.2" "PolymerElements/iron-meta#^1.0.0" "1wl4dx8fnsknw9z9xi8bpc4cy9x70c11x4zxwxnj73hf3smifppl")
29 (fetchbower "iron-meta" "PolymerElements/iron-meta#1.1.2" "PolymerElements/iron-meta#^1.0.0" "1wl4dx8fnsknw9z9xi8bpc4cy9x70c11x4zxwxnj73hf3smifppl")
25 (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.5" "PolymerElements/iron-resizable-behavior#^1.0.0" "1fd5zmbr2hax42vmcasncvk7lzi38fmb1kyii26nn8pnnjak7zkn")
30 (fetchbower "iron-resizable-behavior" "PolymerElements/iron-resizable-behavior#1.0.5" "PolymerElements/iron-resizable-behavior#^1.0.0" "1fd5zmbr2hax42vmcasncvk7lzi38fmb1kyii26nn8pnnjak7zkn")
26 (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.2" "PolymerElements/iron-selector#^1.0.0" "1ajv46llqzvahm5g6g75w7nfyjcslp53ji0wm96l2k94j87spv3r")
31 (fetchbower "iron-selector" "PolymerElements/iron-selector#1.5.2" "PolymerElements/iron-selector#^1.0.0" "1ajv46llqzvahm5g6g75w7nfyjcslp53ji0wm96l2k94j87spv3r")
27 (fetchbower "web-animations-js" "web-animations/web-animations-js#2.2.2" "web-animations/web-animations-js#^2.2.0" "1izfvm3l67vwys0bqbhidi9rqziw2f8wv289386sc6jsxzgkzhga")
32 (fetchbower "web-animations-js" "web-animations/web-animations-js#2.2.2" "web-animations/web-animations-js#^2.2.0" "1izfvm3l67vwys0bqbhidi9rqziw2f8wv289386sc6jsxzgkzhga")
28 (fetchbower "iron-a11y-keys-behavior" "PolymerElements/iron-a11y-keys-behavior#1.1.7" "PolymerElements/iron-a11y-keys-behavior#^1.0.0" "070z46dbbz242002gmqrgy28x0y1fcqp9hnvbi05r3zphiqfx3l7")
29 (fetchbower "iron-validatable-behavior" "PolymerElements/iron-validatable-behavior#1.1.1" "PolymerElements/iron-validatable-behavior#^1.0.0" "1yhxlvywhw2klbbgm3f3cmanxfxggagph4ii635zv0c13707wslv")
30 (fetchbower "iron-form-element-behavior" "PolymerElements/iron-form-element-behavior#1.0.6" "PolymerElements/iron-form-element-behavior#^1.0.0" "0rdhxivgkdhhz2yadgdbjfc70l555p3y83vjh8rfj5hr0asyn6q1")
31 ]; }
33 ]; }
@@ -1,2337 +1,2391 b''
1 # This file has been generated by node2nix 1.0.0. Do not edit!
1 # This file has been generated by node2nix 1.0.0. Do not edit!
2
2
3 {nodeEnv, fetchurl, fetchgit}:
3 {nodeEnv, fetchurl, fetchgit}:
4
4
5 let
5 let
6 sources = {
6 sources = {
7 "grunt-0.4.5" = {
7 "grunt-0.4.5" = {
8 name = "grunt";
8 name = "grunt";
9 packageName = "grunt";
9 packageName = "grunt";
10 version = "0.4.5";
10 version = "0.4.5";
11 src = fetchurl {
11 src = fetchurl {
12 url = "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz";
12 url = "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz";
13 sha1 = "56937cd5194324adff6d207631832a9d6ba4e7f0";
13 sha1 = "56937cd5194324adff6d207631832a9d6ba4e7f0";
14 };
14 };
15 };
15 };
16 "grunt-contrib-copy-1.0.0" = {
16 "grunt-contrib-copy-1.0.0" = {
17 name = "grunt-contrib-copy";
17 name = "grunt-contrib-copy";
18 packageName = "grunt-contrib-copy";
18 packageName = "grunt-contrib-copy";
19 version = "1.0.0";
19 version = "1.0.0";
20 src = fetchurl {
20 src = fetchurl {
21 url = "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz";
21 url = "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz";
22 sha1 = "7060c6581e904b8ab0d00f076e0a8f6e3e7c3573";
22 sha1 = "7060c6581e904b8ab0d00f076e0a8f6e3e7c3573";
23 };
23 };
24 };
24 };
25 "grunt-contrib-concat-0.5.1" = {
25 "grunt-contrib-concat-0.5.1" = {
26 name = "grunt-contrib-concat";
26 name = "grunt-contrib-concat";
27 packageName = "grunt-contrib-concat";
27 packageName = "grunt-contrib-concat";
28 version = "0.5.1";
28 version = "0.5.1";
29 src = fetchurl {
29 src = fetchurl {
30 url = "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz";
30 url = "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz";
31 sha1 = "953c6efdfdfd2c107ab9c85077f2d4b24d31cd49";
31 sha1 = "953c6efdfdfd2c107ab9c85077f2d4b24d31cd49";
32 };
32 };
33 };
33 };
34 "grunt-contrib-jshint-0.12.0" = {
34 "grunt-contrib-jshint-0.12.0" = {
35 name = "grunt-contrib-jshint";
35 name = "grunt-contrib-jshint";
36 packageName = "grunt-contrib-jshint";
36 packageName = "grunt-contrib-jshint";
37 version = "0.12.0";
37 version = "0.12.0";
38 src = fetchurl {
38 src = fetchurl {
39 url = "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.12.0.tgz";
39 url = "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.12.0.tgz";
40 sha1 = "f6b2f06fc715264837a7ab6c69a1ce1a689c2c29";
40 sha1 = "f6b2f06fc715264837a7ab6c69a1ce1a689c2c29";
41 };
41 };
42 };
42 };
43 "grunt-contrib-less-1.4.0" = {
43 "grunt-contrib-less-1.4.0" = {
44 name = "grunt-contrib-less";
44 name = "grunt-contrib-less";
45 packageName = "grunt-contrib-less";
45 packageName = "grunt-contrib-less";
46 version = "1.4.0";
46 version = "1.4.0";
47 src = fetchurl {
47 src = fetchurl {
48 url = "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.0.tgz";
48 url = "https://registry.npmjs.org/grunt-contrib-less/-/grunt-contrib-less-1.4.0.tgz";
49 sha1 = "17ee79cad21c9720ee07b3a991fab5103b513514";
49 sha1 = "17ee79cad21c9720ee07b3a991fab5103b513514";
50 };
50 };
51 };
51 };
52 "grunt-contrib-watch-0.6.1" = {
52 "grunt-contrib-watch-0.6.1" = {
53 name = "grunt-contrib-watch";
53 name = "grunt-contrib-watch";
54 packageName = "grunt-contrib-watch";
54 packageName = "grunt-contrib-watch";
55 version = "0.6.1";
55 version = "0.6.1";
56 src = fetchurl {
56 src = fetchurl {
57 url = "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz";
57 url = "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz";
58 sha1 = "64fdcba25a635f5b4da1b6ce6f90da0aeb6e3f15";
58 sha1 = "64fdcba25a635f5b4da1b6ce6f90da0aeb6e3f15";
59 };
59 };
60 };
60 };
61 "crisper-2.0.2" = {
61 "crisper-2.0.2" = {
62 name = "crisper";
62 name = "crisper";
63 packageName = "crisper";
63 packageName = "crisper";
64 version = "2.0.2";
64 version = "2.0.2";
65 src = fetchurl {
65 src = fetchurl {
66 url = "https://registry.npmjs.org/crisper/-/crisper-2.0.2.tgz";
66 url = "https://registry.npmjs.org/crisper/-/crisper-2.0.2.tgz";
67 sha1 = "188a7da3d00dcf0c64eff7f253d23dacffba7197";
67 sha1 = "188a7da3d00dcf0c64eff7f253d23dacffba7197";
68 };
68 };
69 };
69 };
70 "vulcanize-1.14.8" = {
70 "vulcanize-1.14.8" = {
71 name = "vulcanize";
71 name = "vulcanize";
72 packageName = "vulcanize";
72 packageName = "vulcanize";
73 version = "1.14.8";
73 version = "1.14.8";
74 src = fetchurl {
74 src = fetchurl {
75 url = "https://registry.npmjs.org/vulcanize/-/vulcanize-1.14.8.tgz";
75 url = "https://registry.npmjs.org/vulcanize/-/vulcanize-1.14.8.tgz";
76 sha1 = "3cdd6f81d9baf2c5796ddd6d2d289e45975086f7";
76 sha1 = "3cdd6f81d9baf2c5796ddd6d2d289e45975086f7";
77 };
77 };
78 };
78 };
79 "grunt-crisper-1.0.1" = {
79 "grunt-crisper-1.0.1" = {
80 name = "grunt-crisper";
80 name = "grunt-crisper";
81 packageName = "grunt-crisper";
81 packageName = "grunt-crisper";
82 version = "1.0.1";
82 version = "1.0.1";
83 src = fetchurl {
83 src = fetchurl {
84 url = "https://registry.npmjs.org/grunt-crisper/-/grunt-crisper-1.0.1.tgz";
84 url = "https://registry.npmjs.org/grunt-crisper/-/grunt-crisper-1.0.1.tgz";
85 sha1 = "e7c091dcaff10deb0091e3035ca7e54008991fe7";
85 sha1 = "e7c091dcaff10deb0091e3035ca7e54008991fe7";
86 };
86 };
87 };
87 };
88 "grunt-vulcanize-1.0.0" = {
88 "grunt-vulcanize-1.0.0" = {
89 name = "grunt-vulcanize";
89 name = "grunt-vulcanize";
90 packageName = "grunt-vulcanize";
90 packageName = "grunt-vulcanize";
91 version = "1.0.0";
91 version = "1.0.0";
92 src = fetchurl {
92 src = fetchurl {
93 url = "https://registry.npmjs.org/grunt-vulcanize/-/grunt-vulcanize-1.0.0.tgz";
93 url = "https://registry.npmjs.org/grunt-vulcanize/-/grunt-vulcanize-1.0.0.tgz";
94 sha1 = "f4d6cfef274f8216c06f6c290e7dbb3b9e9e3b0f";
94 sha1 = "f4d6cfef274f8216c06f6c290e7dbb3b9e9e3b0f";
95 };
95 };
96 };
96 };
97 "jshint-2.9.3" = {
97 "jshint-2.9.3" = {
98 name = "jshint";
98 name = "jshint";
99 packageName = "jshint";
99 packageName = "jshint";
100 version = "2.9.3";
100 version = "2.9.3";
101 src = fetchurl {
101 src = fetchurl {
102 url = "https://registry.npmjs.org/jshint/-/jshint-2.9.3.tgz";
102 url = "https://registry.npmjs.org/jshint/-/jshint-2.9.3.tgz";
103 sha1 = "a2e14ff85c2d6bf8c8080e5aa55129ebc6a2d320";
103 sha1 = "a2e14ff85c2d6bf8c8080e5aa55129ebc6a2d320";
104 };
104 };
105 };
105 };
106 "bower-1.7.9" = {
107 name = "bower";
108 packageName = "bower";
109 version = "1.7.9";
110 src = fetchurl {
111 url = "https://registry.npmjs.org/bower/-/bower-1.7.9.tgz";
112 sha1 = "b7296c2393e0d75edaa6ca39648132dd255812b0";
113 };
114 };
115 "favico.js-0.3.10" = {
116 name = "favico.js";
117 packageName = "favico.js";
118 version = "0.3.10";
119 src = fetchurl {
120 url = "https://registry.npmjs.org/favico.js/-/favico.js-0.3.10.tgz";
121 sha1 = "80586e27a117f24a8d51c18a99bdc714d4339301";
122 };
123 };
124 "appenlight-client-git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.0" = {
125 name = "appenlight-client";
126 packageName = "appenlight-client";
127 version = "0.5.0";
128 src = fetchgit {
129 url = "https://git@github.com/AppEnlight/appenlight-client-js.git";
130 rev = "b1d6853345dc3e96468b34537810b3eb77e0764f";
131 sha256 = "2ef00aef7dafdecdc1666d2e83fc190a796849985d04a8f0fad148d64aa4f8db";
132 };
133 };
106 "async-0.1.22" = {
134 "async-0.1.22" = {
107 name = "async";
135 name = "async";
108 packageName = "async";
136 packageName = "async";
109 version = "0.1.22";
137 version = "0.1.22";
110 src = fetchurl {
138 src = fetchurl {
111 url = "https://registry.npmjs.org/async/-/async-0.1.22.tgz";
139 url = "https://registry.npmjs.org/async/-/async-0.1.22.tgz";
112 sha1 = "0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061";
140 sha1 = "0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061";
113 };
141 };
114 };
142 };
115 "coffee-script-1.3.3" = {
143 "coffee-script-1.3.3" = {
116 name = "coffee-script";
144 name = "coffee-script";
117 packageName = "coffee-script";
145 packageName = "coffee-script";
118 version = "1.3.3";
146 version = "1.3.3";
119 src = fetchurl {
147 src = fetchurl {
120 url = "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz";
148 url = "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz";
121 sha1 = "150d6b4cb522894369efed6a2101c20bc7f4a4f4";
149 sha1 = "150d6b4cb522894369efed6a2101c20bc7f4a4f4";
122 };
150 };
123 };
151 };
124 "colors-0.6.2" = {
152 "colors-0.6.2" = {
125 name = "colors";
153 name = "colors";
126 packageName = "colors";
154 packageName = "colors";
127 version = "0.6.2";
155 version = "0.6.2";
128 src = fetchurl {
156 src = fetchurl {
129 url = "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz";
157 url = "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz";
130 sha1 = "2423fe6678ac0c5dae8852e5d0e5be08c997abcc";
158 sha1 = "2423fe6678ac0c5dae8852e5d0e5be08c997abcc";
131 };
159 };
132 };
160 };
133 "dateformat-1.0.2-1.2.3" = {
161 "dateformat-1.0.2-1.2.3" = {
134 name = "dateformat";
162 name = "dateformat";
135 packageName = "dateformat";
163 packageName = "dateformat";
136 version = "1.0.2-1.2.3";
164 version = "1.0.2-1.2.3";
137 src = fetchurl {
165 src = fetchurl {
138 url = "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz";
166 url = "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz";
139 sha1 = "b0220c02de98617433b72851cf47de3df2cdbee9";
167 sha1 = "b0220c02de98617433b72851cf47de3df2cdbee9";
140 };
168 };
141 };
169 };
142 "eventemitter2-0.4.14" = {
170 "eventemitter2-0.4.14" = {
143 name = "eventemitter2";
171 name = "eventemitter2";
144 packageName = "eventemitter2";
172 packageName = "eventemitter2";
145 version = "0.4.14";
173 version = "0.4.14";
146 src = fetchurl {
174 src = fetchurl {
147 url = "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz";
175 url = "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz";
148 sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab";
176 sha1 = "8f61b75cde012b2e9eb284d4545583b5643b61ab";
149 };
177 };
150 };
178 };
151 "findup-sync-0.1.3" = {
179 "findup-sync-0.1.3" = {
152 name = "findup-sync";
180 name = "findup-sync";
153 packageName = "findup-sync";
181 packageName = "findup-sync";
154 version = "0.1.3";
182 version = "0.1.3";
155 src = fetchurl {
183 src = fetchurl {
156 url = "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz";
184 url = "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz";
157 sha1 = "7f3e7a97b82392c653bf06589bd85190e93c3683";
185 sha1 = "7f3e7a97b82392c653bf06589bd85190e93c3683";
158 };
186 };
159 };
187 };
160 "glob-3.1.21" = {
188 "glob-3.1.21" = {
161 name = "glob";
189 name = "glob";
162 packageName = "glob";
190 packageName = "glob";
163 version = "3.1.21";
191 version = "3.1.21";
164 src = fetchurl {
192 src = fetchurl {
165 url = "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz";
193 url = "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz";
166 sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd";
194 sha1 = "d29e0a055dea5138f4d07ed40e8982e83c2066cd";
167 };
195 };
168 };
196 };
169 "hooker-0.2.3" = {
197 "hooker-0.2.3" = {
170 name = "hooker";
198 name = "hooker";
171 packageName = "hooker";
199 packageName = "hooker";
172 version = "0.2.3";
200 version = "0.2.3";
173 src = fetchurl {
201 src = fetchurl {
174 url = "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz";
202 url = "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz";
175 sha1 = "b834f723cc4a242aa65963459df6d984c5d3d959";
203 sha1 = "b834f723cc4a242aa65963459df6d984c5d3d959";
176 };
204 };
177 };
205 };
178 "iconv-lite-0.2.11" = {
206 "iconv-lite-0.2.11" = {
179 name = "iconv-lite";
207 name = "iconv-lite";
180 packageName = "iconv-lite";
208 packageName = "iconv-lite";
181 version = "0.2.11";
209 version = "0.2.11";
182 src = fetchurl {
210 src = fetchurl {
183 url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz";
211 url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz";
184 sha1 = "1ce60a3a57864a292d1321ff4609ca4bb965adc8";
212 sha1 = "1ce60a3a57864a292d1321ff4609ca4bb965adc8";
185 };
213 };
186 };
214 };
187 "minimatch-0.2.14" = {
215 "minimatch-0.2.14" = {
188 name = "minimatch";
216 name = "minimatch";
189 packageName = "minimatch";
217 packageName = "minimatch";
190 version = "0.2.14";
218 version = "0.2.14";
191 src = fetchurl {
219 src = fetchurl {
192 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
220 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz";
193 sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
221 sha1 = "c74e780574f63c6f9a090e90efbe6ef53a6a756a";
194 };
222 };
195 };
223 };
196 "nopt-1.0.10" = {
224 "nopt-1.0.10" = {
197 name = "nopt";
225 name = "nopt";
198 packageName = "nopt";
226 packageName = "nopt";
199 version = "1.0.10";
227 version = "1.0.10";
200 src = fetchurl {
228 src = fetchurl {
201 url = "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz";
229 url = "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz";
202 sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee";
230 sha1 = "6ddd21bd2a31417b92727dd585f8a6f37608ebee";
203 };
231 };
204 };
232 };
205 "rimraf-2.2.8" = {
233 "rimraf-2.2.8" = {
206 name = "rimraf";
234 name = "rimraf";
207 packageName = "rimraf";
235 packageName = "rimraf";
208 version = "2.2.8";
236 version = "2.2.8";
209 src = fetchurl {
237 src = fetchurl {
210 url = "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
238 url = "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz";
211 sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
239 sha1 = "e439be2aaee327321952730f99a8929e4fc50582";
212 };
240 };
213 };
241 };
214 "lodash-0.9.2" = {
242 "lodash-0.9.2" = {
215 name = "lodash";
243 name = "lodash";
216 packageName = "lodash";
244 packageName = "lodash";
217 version = "0.9.2";
245 version = "0.9.2";
218 src = fetchurl {
246 src = fetchurl {
219 url = "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz";
247 url = "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz";
220 sha1 = "8f3499c5245d346d682e5b0d3b40767e09f1a92c";
248 sha1 = "8f3499c5245d346d682e5b0d3b40767e09f1a92c";
221 };
249 };
222 };
250 };
223 "underscore.string-2.2.1" = {
251 "underscore.string-2.2.1" = {
224 name = "underscore.string";
252 name = "underscore.string";
225 packageName = "underscore.string";
253 packageName = "underscore.string";
226 version = "2.2.1";
254 version = "2.2.1";
227 src = fetchurl {
255 src = fetchurl {
228 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz";
256 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz";
229 sha1 = "d7c0fa2af5d5a1a67f4253daee98132e733f0f19";
257 sha1 = "d7c0fa2af5d5a1a67f4253daee98132e733f0f19";
230 };
258 };
231 };
259 };
232 "which-1.0.9" = {
260 "which-1.0.9" = {
233 name = "which";
261 name = "which";
234 packageName = "which";
262 packageName = "which";
235 version = "1.0.9";
263 version = "1.0.9";
236 src = fetchurl {
264 src = fetchurl {
237 url = "https://registry.npmjs.org/which/-/which-1.0.9.tgz";
265 url = "https://registry.npmjs.org/which/-/which-1.0.9.tgz";
238 sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
266 sha1 = "460c1da0f810103d0321a9b633af9e575e64486f";
239 };
267 };
240 };
268 };
241 "js-yaml-2.0.5" = {
269 "js-yaml-2.0.5" = {
242 name = "js-yaml";
270 name = "js-yaml";
243 packageName = "js-yaml";
271 packageName = "js-yaml";
244 version = "2.0.5";
272 version = "2.0.5";
245 src = fetchurl {
273 src = fetchurl {
246 url = "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz";
274 url = "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz";
247 sha1 = "a25ae6509999e97df278c6719da11bd0687743a8";
275 sha1 = "a25ae6509999e97df278c6719da11bd0687743a8";
248 };
276 };
249 };
277 };
250 "exit-0.1.2" = {
278 "exit-0.1.2" = {
251 name = "exit";
279 name = "exit";
252 packageName = "exit";
280 packageName = "exit";
253 version = "0.1.2";
281 version = "0.1.2";
254 src = fetchurl {
282 src = fetchurl {
255 url = "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
283 url = "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz";
256 sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
284 sha1 = "0632638f8d877cc82107d30a0fff1a17cba1cd0c";
257 };
285 };
258 };
286 };
259 "getobject-0.1.0" = {
287 "getobject-0.1.0" = {
260 name = "getobject";
288 name = "getobject";
261 packageName = "getobject";
289 packageName = "getobject";
262 version = "0.1.0";
290 version = "0.1.0";
263 src = fetchurl {
291 src = fetchurl {
264 url = "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz";
292 url = "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz";
265 sha1 = "047a449789fa160d018f5486ed91320b6ec7885c";
293 sha1 = "047a449789fa160d018f5486ed91320b6ec7885c";
266 };
294 };
267 };
295 };
268 "grunt-legacy-util-0.2.0" = {
296 "grunt-legacy-util-0.2.0" = {
269 name = "grunt-legacy-util";
297 name = "grunt-legacy-util";
270 packageName = "grunt-legacy-util";
298 packageName = "grunt-legacy-util";
271 version = "0.2.0";
299 version = "0.2.0";
272 src = fetchurl {
300 src = fetchurl {
273 url = "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz";
301 url = "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz";
274 sha1 = "93324884dbf7e37a9ff7c026dff451d94a9e554b";
302 sha1 = "93324884dbf7e37a9ff7c026dff451d94a9e554b";
275 };
303 };
276 };
304 };
277 "grunt-legacy-log-0.1.3" = {
305 "grunt-legacy-log-0.1.3" = {
278 name = "grunt-legacy-log";
306 name = "grunt-legacy-log";
279 packageName = "grunt-legacy-log";
307 packageName = "grunt-legacy-log";
280 version = "0.1.3";
308 version = "0.1.3";
281 src = fetchurl {
309 src = fetchurl {
282 url = "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz";
310 url = "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz";
283 sha1 = "ec29426e803021af59029f87d2f9cd7335a05531";
311 sha1 = "ec29426e803021af59029f87d2f9cd7335a05531";
284 };
312 };
285 };
313 };
286 "glob-3.2.11" = {
314 "glob-3.2.11" = {
287 name = "glob";
315 name = "glob";
288 packageName = "glob";
316 packageName = "glob";
289 version = "3.2.11";
317 version = "3.2.11";
290 src = fetchurl {
318 src = fetchurl {
291 url = "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz";
319 url = "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz";
292 sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d";
320 sha1 = "4a973f635b9190f715d10987d5c00fd2815ebe3d";
293 };
321 };
294 };
322 };
295 "lodash-2.4.2" = {
323 "lodash-2.4.2" = {
296 name = "lodash";
324 name = "lodash";
297 packageName = "lodash";
325 packageName = "lodash";
298 version = "2.4.2";
326 version = "2.4.2";
299 src = fetchurl {
327 src = fetchurl {
300 url = "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz";
328 url = "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz";
301 sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e";
329 sha1 = "fadd834b9683073da179b3eae6d9c0d15053f73e";
302 };
330 };
303 };
331 };
304 "inherits-2.0.1" = {
332 "inherits-2.0.3" = {
305 name = "inherits";
333 name = "inherits";
306 packageName = "inherits";
334 packageName = "inherits";
307 version = "2.0.1";
335 version = "2.0.3";
308 src = fetchurl {
336 src = fetchurl {
309 url = "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz";
337 url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
310 sha1 = "b17d08d326b4423e568eff719f91b0b1cbdf69f1";
338 sha1 = "633c2c83e3da42a502f52466022480f4208261de";
311 };
339 };
312 };
340 };
313 "minimatch-0.3.0" = {
341 "minimatch-0.3.0" = {
314 name = "minimatch";
342 name = "minimatch";
315 packageName = "minimatch";
343 packageName = "minimatch";
316 version = "0.3.0";
344 version = "0.3.0";
317 src = fetchurl {
345 src = fetchurl {
318 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz";
346 url = "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz";
319 sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd";
347 sha1 = "275d8edaac4f1bb3326472089e7949c8394699dd";
320 };
348 };
321 };
349 };
322 "lru-cache-2.7.3" = {
350 "lru-cache-2.7.3" = {
323 name = "lru-cache";
351 name = "lru-cache";
324 packageName = "lru-cache";
352 packageName = "lru-cache";
325 version = "2.7.3";
353 version = "2.7.3";
326 src = fetchurl {
354 src = fetchurl {
327 url = "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz";
355 url = "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz";
328 sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952";
356 sha1 = "6d4524e8b955f95d4f5b58851ce21dd72fb4e952";
329 };
357 };
330 };
358 };
331 "sigmund-1.0.1" = {
359 "sigmund-1.0.1" = {
332 name = "sigmund";
360 name = "sigmund";
333 packageName = "sigmund";
361 packageName = "sigmund";
334 version = "1.0.1";
362 version = "1.0.1";
335 src = fetchurl {
363 src = fetchurl {
336 url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
364 url = "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz";
337 sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
365 sha1 = "3ff21f198cad2175f9f3b781853fd94d0d19b590";
338 };
366 };
339 };
367 };
340 "graceful-fs-1.2.3" = {
368 "graceful-fs-1.2.3" = {
341 name = "graceful-fs";
369 name = "graceful-fs";
342 packageName = "graceful-fs";
370 packageName = "graceful-fs";
343 version = "1.2.3";
371 version = "1.2.3";
344 src = fetchurl {
372 src = fetchurl {
345 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
373 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz";
346 sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
374 sha1 = "15a4806a57547cb2d2dbf27f42e89a8c3451b364";
347 };
375 };
348 };
376 };
349 "inherits-1.0.2" = {
377 "inherits-1.0.2" = {
350 name = "inherits";
378 name = "inherits";
351 packageName = "inherits";
379 packageName = "inherits";
352 version = "1.0.2";
380 version = "1.0.2";
353 src = fetchurl {
381 src = fetchurl {
354 url = "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
382 url = "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz";
355 sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
383 sha1 = "ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b";
356 };
384 };
357 };
385 };
358 "abbrev-1.0.9" = {
386 "abbrev-1.0.9" = {
359 name = "abbrev";
387 name = "abbrev";
360 packageName = "abbrev";
388 packageName = "abbrev";
361 version = "1.0.9";
389 version = "1.0.9";
362 src = fetchurl {
390 src = fetchurl {
363 url = "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz";
391 url = "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz";
364 sha1 = "91b4792588a7738c25f35dd6f63752a2f8776135";
392 sha1 = "91b4792588a7738c25f35dd6f63752a2f8776135";
365 };
393 };
366 };
394 };
367 "argparse-0.1.16" = {
395 "argparse-0.1.16" = {
368 name = "argparse";
396 name = "argparse";
369 packageName = "argparse";
397 packageName = "argparse";
370 version = "0.1.16";
398 version = "0.1.16";
371 src = fetchurl {
399 src = fetchurl {
372 url = "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
400 url = "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz";
373 sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
401 sha1 = "cfd01e0fbba3d6caed049fbd758d40f65196f57c";
374 };
402 };
375 };
403 };
376 "esprima-1.0.4" = {
404 "esprima-1.0.4" = {
377 name = "esprima";
405 name = "esprima";
378 packageName = "esprima";
406 packageName = "esprima";
379 version = "1.0.4";
407 version = "1.0.4";
380 src = fetchurl {
408 src = fetchurl {
381 url = "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz";
409 url = "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz";
382 sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad";
410 sha1 = "9f557e08fc3b4d26ece9dd34f8fbf476b62585ad";
383 };
411 };
384 };
412 };
385 "underscore-1.7.0" = {
413 "underscore-1.7.0" = {
386 name = "underscore";
414 name = "underscore";
387 packageName = "underscore";
415 packageName = "underscore";
388 version = "1.7.0";
416 version = "1.7.0";
389 src = fetchurl {
417 src = fetchurl {
390 url = "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
418 url = "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz";
391 sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
419 sha1 = "6bbaf0877500d36be34ecaa584e0db9fef035209";
392 };
420 };
393 };
421 };
394 "underscore.string-2.4.0" = {
422 "underscore.string-2.4.0" = {
395 name = "underscore.string";
423 name = "underscore.string";
396 packageName = "underscore.string";
424 packageName = "underscore.string";
397 version = "2.4.0";
425 version = "2.4.0";
398 src = fetchurl {
426 src = fetchurl {
399 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
427 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz";
400 sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
428 sha1 = "8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b";
401 };
429 };
402 };
430 };
403 "grunt-legacy-log-utils-0.1.1" = {
431 "grunt-legacy-log-utils-0.1.1" = {
404 name = "grunt-legacy-log-utils";
432 name = "grunt-legacy-log-utils";
405 packageName = "grunt-legacy-log-utils";
433 packageName = "grunt-legacy-log-utils";
406 version = "0.1.1";
434 version = "0.1.1";
407 src = fetchurl {
435 src = fetchurl {
408 url = "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz";
436 url = "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz";
409 sha1 = "c0706b9dd9064e116f36f23fe4e6b048672c0f7e";
437 sha1 = "c0706b9dd9064e116f36f23fe4e6b048672c0f7e";
410 };
438 };
411 };
439 };
412 "underscore.string-2.3.3" = {
440 "underscore.string-2.3.3" = {
413 name = "underscore.string";
441 name = "underscore.string";
414 packageName = "underscore.string";
442 packageName = "underscore.string";
415 version = "2.3.3";
443 version = "2.3.3";
416 src = fetchurl {
444 src = fetchurl {
417 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz";
445 url = "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz";
418 sha1 = "71c08bf6b428b1133f37e78fa3a21c82f7329b0d";
446 sha1 = "71c08bf6b428b1133f37e78fa3a21c82f7329b0d";
419 };
447 };
420 };
448 };
421 "chalk-1.1.3" = {
449 "chalk-1.1.3" = {
422 name = "chalk";
450 name = "chalk";
423 packageName = "chalk";
451 packageName = "chalk";
424 version = "1.1.3";
452 version = "1.1.3";
425 src = fetchurl {
453 src = fetchurl {
426 url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
454 url = "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";
427 sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
455 sha1 = "a8115c55e4a702fe4d150abd3872822a7e09fc98";
428 };
456 };
429 };
457 };
430 "file-sync-cmp-0.1.1" = {
458 "file-sync-cmp-0.1.1" = {
431 name = "file-sync-cmp";
459 name = "file-sync-cmp";
432 packageName = "file-sync-cmp";
460 packageName = "file-sync-cmp";
433 version = "0.1.1";
461 version = "0.1.1";
434 src = fetchurl {
462 src = fetchurl {
435 url = "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz";
463 url = "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz";
436 sha1 = "a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b";
464 sha1 = "a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b";
437 };
465 };
438 };
466 };
439 "ansi-styles-2.2.1" = {
467 "ansi-styles-2.2.1" = {
440 name = "ansi-styles";
468 name = "ansi-styles";
441 packageName = "ansi-styles";
469 packageName = "ansi-styles";
442 version = "2.2.1";
470 version = "2.2.1";
443 src = fetchurl {
471 src = fetchurl {
444 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
472 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";
445 sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
473 sha1 = "b432dd3358b634cf75e1e4664368240533c1ddbe";
446 };
474 };
447 };
475 };
448 "escape-string-regexp-1.0.5" = {
476 "escape-string-regexp-1.0.5" = {
449 name = "escape-string-regexp";
477 name = "escape-string-regexp";
450 packageName = "escape-string-regexp";
478 packageName = "escape-string-regexp";
451 version = "1.0.5";
479 version = "1.0.5";
452 src = fetchurl {
480 src = fetchurl {
453 url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
481 url = "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
454 sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
482 sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
455 };
483 };
456 };
484 };
457 "has-ansi-2.0.0" = {
485 "has-ansi-2.0.0" = {
458 name = "has-ansi";
486 name = "has-ansi";
459 packageName = "has-ansi";
487 packageName = "has-ansi";
460 version = "2.0.0";
488 version = "2.0.0";
461 src = fetchurl {
489 src = fetchurl {
462 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
490 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz";
463 sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
491 sha1 = "34f5049ce1ecdf2b0649af3ef24e45ed35416d91";
464 };
492 };
465 };
493 };
466 "strip-ansi-3.0.1" = {
494 "strip-ansi-3.0.1" = {
467 name = "strip-ansi";
495 name = "strip-ansi";
468 packageName = "strip-ansi";
496 packageName = "strip-ansi";
469 version = "3.0.1";
497 version = "3.0.1";
470 src = fetchurl {
498 src = fetchurl {
471 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
499 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
472 sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
500 sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
473 };
501 };
474 };
502 };
475 "supports-color-2.0.0" = {
503 "supports-color-2.0.0" = {
476 name = "supports-color";
504 name = "supports-color";
477 packageName = "supports-color";
505 packageName = "supports-color";
478 version = "2.0.0";
506 version = "2.0.0";
479 src = fetchurl {
507 src = fetchurl {
480 url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
508 url = "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";
481 sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
509 sha1 = "535d045ce6b6363fa40117084629995e9df324c7";
482 };
510 };
483 };
511 };
484 "ansi-regex-2.0.0" = {
512 "ansi-regex-2.0.0" = {
485 name = "ansi-regex";
513 name = "ansi-regex";
486 packageName = "ansi-regex";
514 packageName = "ansi-regex";
487 version = "2.0.0";
515 version = "2.0.0";
488 src = fetchurl {
516 src = fetchurl {
489 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";
517 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz";
490 sha1 = "c5061b6e0ef8a81775e50f5d66151bf6bf371107";
518 sha1 = "c5061b6e0ef8a81775e50f5d66151bf6bf371107";
491 };
519 };
492 };
520 };
493 "chalk-0.5.1" = {
521 "chalk-0.5.1" = {
494 name = "chalk";
522 name = "chalk";
495 packageName = "chalk";
523 packageName = "chalk";
496 version = "0.5.1";
524 version = "0.5.1";
497 src = fetchurl {
525 src = fetchurl {
498 url = "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz";
526 url = "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz";
499 sha1 = "663b3a648b68b55d04690d49167aa837858f2174";
527 sha1 = "663b3a648b68b55d04690d49167aa837858f2174";
500 };
528 };
501 };
529 };
502 "source-map-0.3.0" = {
530 "source-map-0.3.0" = {
503 name = "source-map";
531 name = "source-map";
504 packageName = "source-map";
532 packageName = "source-map";
505 version = "0.3.0";
533 version = "0.3.0";
506 src = fetchurl {
534 src = fetchurl {
507 url = "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz";
535 url = "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz";
508 sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9";
536 sha1 = "8586fb9a5a005e5b501e21cd18b6f21b457ad1f9";
509 };
537 };
510 };
538 };
511 "ansi-styles-1.1.0" = {
539 "ansi-styles-1.1.0" = {
512 name = "ansi-styles";
540 name = "ansi-styles";
513 packageName = "ansi-styles";
541 packageName = "ansi-styles";
514 version = "1.1.0";
542 version = "1.1.0";
515 src = fetchurl {
543 src = fetchurl {
516 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz";
544 url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz";
517 sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de";
545 sha1 = "eaecbf66cd706882760b2f4691582b8f55d7a7de";
518 };
546 };
519 };
547 };
520 "has-ansi-0.1.0" = {
548 "has-ansi-0.1.0" = {
521 name = "has-ansi";
549 name = "has-ansi";
522 packageName = "has-ansi";
550 packageName = "has-ansi";
523 version = "0.1.0";
551 version = "0.1.0";
524 src = fetchurl {
552 src = fetchurl {
525 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz";
553 url = "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz";
526 sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e";
554 sha1 = "84f265aae8c0e6a88a12d7022894b7568894c62e";
527 };
555 };
528 };
556 };
529 "strip-ansi-0.3.0" = {
557 "strip-ansi-0.3.0" = {
530 name = "strip-ansi";
558 name = "strip-ansi";
531 packageName = "strip-ansi";
559 packageName = "strip-ansi";
532 version = "0.3.0";
560 version = "0.3.0";
533 src = fetchurl {
561 src = fetchurl {
534 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz";
562 url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz";
535 sha1 = "25f48ea22ca79187f3174a4db8759347bb126220";
563 sha1 = "25f48ea22ca79187f3174a4db8759347bb126220";
536 };
564 };
537 };
565 };
538 "supports-color-0.2.0" = {
566 "supports-color-0.2.0" = {
539 name = "supports-color";
567 name = "supports-color";
540 packageName = "supports-color";
568 packageName = "supports-color";
541 version = "0.2.0";
569 version = "0.2.0";
542 src = fetchurl {
570 src = fetchurl {
543 url = "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz";
571 url = "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz";
544 sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a";
572 sha1 = "d92de2694eb3f67323973d7ae3d8b55b4c22190a";
545 };
573 };
546 };
574 };
547 "ansi-regex-0.2.1" = {
575 "ansi-regex-0.2.1" = {
548 name = "ansi-regex";
576 name = "ansi-regex";
549 packageName = "ansi-regex";
577 packageName = "ansi-regex";
550 version = "0.2.1";
578 version = "0.2.1";
551 src = fetchurl {
579 src = fetchurl {
552 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz";
580 url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz";
553 sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9";
581 sha1 = "0d8e946967a3d8143f93e24e298525fc1b2235f9";
554 };
582 };
555 };
583 };
556 "amdefine-1.0.0" = {
584 "amdefine-1.0.0" = {
557 name = "amdefine";
585 name = "amdefine";
558 packageName = "amdefine";
586 packageName = "amdefine";
559 version = "1.0.0";
587 version = "1.0.0";
560 src = fetchurl {
588 src = fetchurl {
561 url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";
589 url = "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz";
562 sha1 = "fd17474700cb5cc9c2b709f0be9d23ce3c198c33";
590 sha1 = "fd17474700cb5cc9c2b709f0be9d23ce3c198c33";
563 };
591 };
564 };
592 };
565 "async-2.0.1" = {
593 "async-2.0.1" = {
566 name = "async";
594 name = "async";
567 packageName = "async";
595 packageName = "async";
568 version = "2.0.1";
596 version = "2.0.1";
569 src = fetchurl {
597 src = fetchurl {
570 url = "https://registry.npmjs.org/async/-/async-2.0.1.tgz";
598 url = "https://registry.npmjs.org/async/-/async-2.0.1.tgz";
571 sha1 = "b709cc0280a9c36f09f4536be823c838a9049e25";
599 sha1 = "b709cc0280a9c36f09f4536be823c838a9049e25";
572 };
600 };
573 };
601 };
574 "less-2.7.1" = {
602 "less-2.7.1" = {
575 name = "less";
603 name = "less";
576 packageName = "less";
604 packageName = "less";
577 version = "2.7.1";
605 version = "2.7.1";
578 src = fetchurl {
606 src = fetchurl {
579 url = "https://registry.npmjs.org/less/-/less-2.7.1.tgz";
607 url = "https://registry.npmjs.org/less/-/less-2.7.1.tgz";
580 sha1 = "6cbfea22b3b830304e9a5fb371d54fa480c9d7cf";
608 sha1 = "6cbfea22b3b830304e9a5fb371d54fa480c9d7cf";
581 };
609 };
582 };
610 };
583 "lodash-4.15.0" = {
611 "lodash-4.16.2" = {
584 name = "lodash";
612 name = "lodash";
585 packageName = "lodash";
613 packageName = "lodash";
586 version = "4.15.0";
614 version = "4.16.2";
587 src = fetchurl {
615 src = fetchurl {
588 url = "https://registry.npmjs.org/lodash/-/lodash-4.15.0.tgz";
616 url = "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz";
589 sha1 = "3162391d8f0140aa22cf8f6b3c34d6b7f63d3aa9";
617 sha1 = "3e626db827048a699281a8a125226326cfc0e652";
590 };
618 };
591 };
619 };
592 "errno-0.1.4" = {
620 "errno-0.1.4" = {
593 name = "errno";
621 name = "errno";
594 packageName = "errno";
622 packageName = "errno";
595 version = "0.1.4";
623 version = "0.1.4";
596 src = fetchurl {
624 src = fetchurl {
597 url = "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz";
625 url = "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz";
598 sha1 = "b896e23a9e5e8ba33871fc996abd3635fc9a1c7d";
626 sha1 = "b896e23a9e5e8ba33871fc996abd3635fc9a1c7d";
599 };
627 };
600 };
628 };
601 "graceful-fs-4.1.6" = {
629 "graceful-fs-4.1.8" = {
602 name = "graceful-fs";
630 name = "graceful-fs";
603 packageName = "graceful-fs";
631 packageName = "graceful-fs";
604 version = "4.1.6";
632 version = "4.1.8";
605 src = fetchurl {
633 src = fetchurl {
606 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.6.tgz";
634 url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.8.tgz";
607 sha1 = "514c38772b31bee2e08bedc21a0aeb3abf54c19e";
635 sha1 = "da3e11135eb2168bdd374532c4e2649751672890";
608 };
636 };
609 };
637 };
610 "image-size-0.5.0" = {
638 "image-size-0.5.0" = {
611 name = "image-size";
639 name = "image-size";
612 packageName = "image-size";
640 packageName = "image-size";
613 version = "0.5.0";
641 version = "0.5.0";
614 src = fetchurl {
642 src = fetchurl {
615 url = "https://registry.npmjs.org/image-size/-/image-size-0.5.0.tgz";
643 url = "https://registry.npmjs.org/image-size/-/image-size-0.5.0.tgz";
616 sha1 = "be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651";
644 sha1 = "be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651";
617 };
645 };
618 };
646 };
619 "mime-1.3.4" = {
647 "mime-1.3.4" = {
620 name = "mime";
648 name = "mime";
621 packageName = "mime";
649 packageName = "mime";
622 version = "1.3.4";
650 version = "1.3.4";
623 src = fetchurl {
651 src = fetchurl {
624 url = "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz";
652 url = "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz";
625 sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53";
653 sha1 = "115f9e3b6b3daf2959983cb38f149a2d40eb5d53";
626 };
654 };
627 };
655 };
628 "mkdirp-0.5.1" = {
656 "mkdirp-0.5.1" = {
629 name = "mkdirp";
657 name = "mkdirp";
630 packageName = "mkdirp";
658 packageName = "mkdirp";
631 version = "0.5.1";
659 version = "0.5.1";
632 src = fetchurl {
660 src = fetchurl {
633 url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
661 url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
634 sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
662 sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
635 };
663 };
636 };
664 };
637 "promise-7.1.1" = {
665 "promise-7.1.1" = {
638 name = "promise";
666 name = "promise";
639 packageName = "promise";
667 packageName = "promise";
640 version = "7.1.1";
668 version = "7.1.1";
641 src = fetchurl {
669 src = fetchurl {
642 url = "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz";
670 url = "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz";
643 sha1 = "489654c692616b8aa55b0724fa809bb7db49c5bf";
671 sha1 = "489654c692616b8aa55b0724fa809bb7db49c5bf";
644 };
672 };
645 };
673 };
646 "source-map-0.5.6" = {
674 "source-map-0.5.6" = {
647 name = "source-map";
675 name = "source-map";
648 packageName = "source-map";
676 packageName = "source-map";
649 version = "0.5.6";
677 version = "0.5.6";
650 src = fetchurl {
678 src = fetchurl {
651 url = "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz";
679 url = "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz";
652 sha1 = "75ce38f52bf0733c5a7f0c118d81334a2bb5f412";
680 sha1 = "75ce38f52bf0733c5a7f0c118d81334a2bb5f412";
653 };
681 };
654 };
682 };
655 "prr-0.0.0" = {
683 "prr-0.0.0" = {
656 name = "prr";
684 name = "prr";
657 packageName = "prr";
685 packageName = "prr";
658 version = "0.0.0";
686 version = "0.0.0";
659 src = fetchurl {
687 src = fetchurl {
660 url = "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz";
688 url = "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz";
661 sha1 = "1a84b85908325501411853d0081ee3fa86e2926a";
689 sha1 = "1a84b85908325501411853d0081ee3fa86e2926a";
662 };
690 };
663 };
691 };
664 "minimist-0.0.8" = {
692 "minimist-0.0.8" = {
665 name = "minimist";
693 name = "minimist";
666 packageName = "minimist";
694 packageName = "minimist";
667 version = "0.0.8";
695 version = "0.0.8";
668 src = fetchurl {
696 src = fetchurl {
669 url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
697 url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
670 sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
698 sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
671 };
699 };
672 };
700 };
673 "asap-2.0.4" = {
701 "asap-2.0.5" = {
674 name = "asap";
702 name = "asap";
675 packageName = "asap";
703 packageName = "asap";
676 version = "2.0.4";
704 version = "2.0.5";
677 src = fetchurl {
705 src = fetchurl {
678 url = "https://registry.npmjs.org/asap/-/asap-2.0.4.tgz";
706 url = "https://registry.npmjs.org/asap/-/asap-2.0.5.tgz";
679 sha1 = "b391bf7f6bfbc65706022fec8f49c4b07fecf589";
707 sha1 = "522765b50c3510490e52d7dcfe085ef9ba96958f";
680 };
708 };
681 };
709 };
682 "gaze-0.5.2" = {
710 "gaze-0.5.2" = {
683 name = "gaze";
711 name = "gaze";
684 packageName = "gaze";
712 packageName = "gaze";
685 version = "0.5.2";
713 version = "0.5.2";
686 src = fetchurl {
714 src = fetchurl {
687 url = "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz";
715 url = "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz";
688 sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f";
716 sha1 = "40b709537d24d1d45767db5a908689dfe69ac44f";
689 };
717 };
690 };
718 };
691 "tiny-lr-fork-0.0.5" = {
719 "tiny-lr-fork-0.0.5" = {
692 name = "tiny-lr-fork";
720 name = "tiny-lr-fork";
693 packageName = "tiny-lr-fork";
721 packageName = "tiny-lr-fork";
694 version = "0.0.5";
722 version = "0.0.5";
695 src = fetchurl {
723 src = fetchurl {
696 url = "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz";
724 url = "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz";
697 sha1 = "1e99e1e2a8469b736ab97d97eefa98c71f76ed0a";
725 sha1 = "1e99e1e2a8469b736ab97d97eefa98c71f76ed0a";
698 };
726 };
699 };
727 };
700 "async-0.2.10" = {
728 "async-0.2.10" = {
701 name = "async";
729 name = "async";
702 packageName = "async";
730 packageName = "async";
703 version = "0.2.10";
731 version = "0.2.10";
704 src = fetchurl {
732 src = fetchurl {
705 url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
733 url = "https://registry.npmjs.org/async/-/async-0.2.10.tgz";
706 sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
734 sha1 = "b6bbe0b0674b9d719708ca38de8c237cb526c3d1";
707 };
735 };
708 };
736 };
709 "globule-0.1.0" = {
737 "globule-0.1.0" = {
710 name = "globule";
738 name = "globule";
711 packageName = "globule";
739 packageName = "globule";
712 version = "0.1.0";
740 version = "0.1.0";
713 src = fetchurl {
741 src = fetchurl {
714 url = "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz";
742 url = "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz";
715 sha1 = "d9c8edde1da79d125a151b79533b978676346ae5";
743 sha1 = "d9c8edde1da79d125a151b79533b978676346ae5";
716 };
744 };
717 };
745 };
718 "lodash-1.0.2" = {
746 "lodash-1.0.2" = {
719 name = "lodash";
747 name = "lodash";
720 packageName = "lodash";
748 packageName = "lodash";
721 version = "1.0.2";
749 version = "1.0.2";
722 src = fetchurl {
750 src = fetchurl {
723 url = "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz";
751 url = "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz";
724 sha1 = "8f57560c83b59fc270bd3d561b690043430e2551";
752 sha1 = "8f57560c83b59fc270bd3d561b690043430e2551";
725 };
753 };
726 };
754 };
727 "qs-0.5.6" = {
755 "qs-0.5.6" = {
728 name = "qs";
756 name = "qs";
729 packageName = "qs";
757 packageName = "qs";
730 version = "0.5.6";
758 version = "0.5.6";
731 src = fetchurl {
759 src = fetchurl {
732 url = "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz";
760 url = "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz";
733 sha1 = "31b1ad058567651c526921506b9a8793911a0384";
761 sha1 = "31b1ad058567651c526921506b9a8793911a0384";
734 };
762 };
735 };
763 };
736 "faye-websocket-0.4.4" = {
764 "faye-websocket-0.4.4" = {
737 name = "faye-websocket";
765 name = "faye-websocket";
738 packageName = "faye-websocket";
766 packageName = "faye-websocket";
739 version = "0.4.4";
767 version = "0.4.4";
740 src = fetchurl {
768 src = fetchurl {
741 url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz";
769 url = "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz";
742 sha1 = "c14c5b3bf14d7417ffbfd990c0a7495cd9f337bc";
770 sha1 = "c14c5b3bf14d7417ffbfd990c0a7495cd9f337bc";
743 };
771 };
744 };
772 };
745 "noptify-0.0.3" = {
773 "noptify-0.0.3" = {
746 name = "noptify";
774 name = "noptify";
747 packageName = "noptify";
775 packageName = "noptify";
748 version = "0.0.3";
776 version = "0.0.3";
749 src = fetchurl {
777 src = fetchurl {
750 url = "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz";
778 url = "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz";
751 sha1 = "58f654a73d9753df0c51d9686dc92104a67f4bbb";
779 sha1 = "58f654a73d9753df0c51d9686dc92104a67f4bbb";
752 };
780 };
753 };
781 };
754 "debug-0.7.4" = {
782 "debug-0.7.4" = {
755 name = "debug";
783 name = "debug";
756 packageName = "debug";
784 packageName = "debug";
757 version = "0.7.4";
785 version = "0.7.4";
758 src = fetchurl {
786 src = fetchurl {
759 url = "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz";
787 url = "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz";
760 sha1 = "06e1ea8082c2cb14e39806e22e2f6f757f92af39";
788 sha1 = "06e1ea8082c2cb14e39806e22e2f6f757f92af39";
761 };
789 };
762 };
790 };
763 "nopt-2.0.0" = {
791 "nopt-2.0.0" = {
764 name = "nopt";
792 name = "nopt";
765 packageName = "nopt";
793 packageName = "nopt";
766 version = "2.0.0";
794 version = "2.0.0";
767 src = fetchurl {
795 src = fetchurl {
768 url = "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz";
796 url = "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz";
769 sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d";
797 sha1 = "ca7416f20a5e3f9c3b86180f96295fa3d0b52e0d";
770 };
798 };
771 };
799 };
772 "command-line-args-2.1.6" = {
800 "command-line-args-2.1.6" = {
773 name = "command-line-args";
801 name = "command-line-args";
774 packageName = "command-line-args";
802 packageName = "command-line-args";
775 version = "2.1.6";
803 version = "2.1.6";
776 src = fetchurl {
804 src = fetchurl {
777 url = "https://registry.npmjs.org/command-line-args/-/command-line-args-2.1.6.tgz";
805 url = "https://registry.npmjs.org/command-line-args/-/command-line-args-2.1.6.tgz";
778 sha1 = "f197d6eaff34c9085577484b2864375b294f5697";
806 sha1 = "f197d6eaff34c9085577484b2864375b294f5697";
779 };
807 };
780 };
808 };
781 "dom5-1.3.3" = {
809 "dom5-1.3.6" = {
782 name = "dom5";
810 name = "dom5";
783 packageName = "dom5";
811 packageName = "dom5";
784 version = "1.3.3";
812 version = "1.3.6";
785 src = fetchurl {
813 src = fetchurl {
786 url = "https://registry.npmjs.org/dom5/-/dom5-1.3.3.tgz";
814 url = "https://registry.npmjs.org/dom5/-/dom5-1.3.6.tgz";
787 sha1 = "07e514522c245c7aa8512aa3f9118e8bcab9f909";
815 sha1 = "a7088a9fc5f3b08dc9f6eda4c7abaeb241945e0d";
788 };
816 };
789 };
817 };
790 "array-back-1.0.3" = {
818 "array-back-1.0.3" = {
791 name = "array-back";
819 name = "array-back";
792 packageName = "array-back";
820 packageName = "array-back";
793 version = "1.0.3";
821 version = "1.0.3";
794 src = fetchurl {
822 src = fetchurl {
795 url = "https://registry.npmjs.org/array-back/-/array-back-1.0.3.tgz";
823 url = "https://registry.npmjs.org/array-back/-/array-back-1.0.3.tgz";
796 sha1 = "f1128a5cf1b91c80bed4a218f8c5b635c8b10663";
824 sha1 = "f1128a5cf1b91c80bed4a218f8c5b635c8b10663";
797 };
825 };
798 };
826 };
799 "command-line-usage-2.0.5" = {
827 "command-line-usage-2.0.5" = {
800 name = "command-line-usage";
828 name = "command-line-usage";
801 packageName = "command-line-usage";
829 packageName = "command-line-usage";
802 version = "2.0.5";
830 version = "2.0.5";
803 src = fetchurl {
831 src = fetchurl {
804 url = "https://registry.npmjs.org/command-line-usage/-/command-line-usage-2.0.5.tgz";
832 url = "https://registry.npmjs.org/command-line-usage/-/command-line-usage-2.0.5.tgz";
805 sha1 = "f80c35ca5e8624841923ea3be3b9bfbf4f7be27b";
833 sha1 = "f80c35ca5e8624841923ea3be3b9bfbf4f7be27b";
806 };
834 };
807 };
835 };
808 "core-js-2.4.1" = {
836 "core-js-2.4.1" = {
809 name = "core-js";
837 name = "core-js";
810 packageName = "core-js";
838 packageName = "core-js";
811 version = "2.4.1";
839 version = "2.4.1";
812 src = fetchurl {
840 src = fetchurl {
813 url = "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz";
841 url = "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz";
814 sha1 = "4de911e667b0eae9124e34254b53aea6fc618d3e";
842 sha1 = "4de911e667b0eae9124e34254b53aea6fc618d3e";
815 };
843 };
816 };
844 };
817 "feature-detect-es6-1.3.1" = {
845 "feature-detect-es6-1.3.1" = {
818 name = "feature-detect-es6";
846 name = "feature-detect-es6";
819 packageName = "feature-detect-es6";
847 packageName = "feature-detect-es6";
820 version = "1.3.1";
848 version = "1.3.1";
821 src = fetchurl {
849 src = fetchurl {
822 url = "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz";
850 url = "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz";
823 sha1 = "f888736af9cb0c91f55663bfa4762eb96ee7047f";
851 sha1 = "f888736af9cb0c91f55663bfa4762eb96ee7047f";
824 };
852 };
825 };
853 };
826 "find-replace-1.0.2" = {
854 "find-replace-1.0.2" = {
827 name = "find-replace";
855 name = "find-replace";
828 packageName = "find-replace";
856 packageName = "find-replace";
829 version = "1.0.2";
857 version = "1.0.2";
830 src = fetchurl {
858 src = fetchurl {
831 url = "https://registry.npmjs.org/find-replace/-/find-replace-1.0.2.tgz";
859 url = "https://registry.npmjs.org/find-replace/-/find-replace-1.0.2.tgz";
832 sha1 = "a2d6ce740d15f0d92b1b26763e2ce9c0e361fd98";
860 sha1 = "a2d6ce740d15f0d92b1b26763e2ce9c0e361fd98";
833 };
861 };
834 };
862 };
835 "typical-2.5.0" = {
863 "typical-2.6.0" = {
836 name = "typical";
864 name = "typical";
837 packageName = "typical";
865 packageName = "typical";
838 version = "2.5.0";
866 version = "2.6.0";
839 src = fetchurl {
867 src = fetchurl {
840 url = "https://registry.npmjs.org/typical/-/typical-2.5.0.tgz";
868 url = "https://registry.npmjs.org/typical/-/typical-2.6.0.tgz";
841 sha1 = "81244918aa28180c9e602aa457173404be0604f1";
869 sha1 = "89d51554ab139848a65bcc2c8772f8fb450c40ed";
842 };
870 };
843 };
871 };
844 "ansi-escape-sequences-2.2.2" = {
872 "ansi-escape-sequences-2.2.2" = {
845 name = "ansi-escape-sequences";
873 name = "ansi-escape-sequences";
846 packageName = "ansi-escape-sequences";
874 packageName = "ansi-escape-sequences";
847 version = "2.2.2";
875 version = "2.2.2";
848 src = fetchurl {
876 src = fetchurl {
849 url = "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-2.2.2.tgz";
877 url = "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-2.2.2.tgz";
850 sha1 = "174c78d6f8b7de75f8957ae81c7f72210c701635";
878 sha1 = "174c78d6f8b7de75f8957ae81c7f72210c701635";
851 };
879 };
852 };
880 };
853 "column-layout-2.1.4" = {
881 "column-layout-2.1.4" = {
854 name = "column-layout";
882 name = "column-layout";
855 packageName = "column-layout";
883 packageName = "column-layout";
856 version = "2.1.4";
884 version = "2.1.4";
857 src = fetchurl {
885 src = fetchurl {
858 url = "https://registry.npmjs.org/column-layout/-/column-layout-2.1.4.tgz";
886 url = "https://registry.npmjs.org/column-layout/-/column-layout-2.1.4.tgz";
859 sha1 = "ed2857092ccf8338026fe538379d9672d70b3641";
887 sha1 = "ed2857092ccf8338026fe538379d9672d70b3641";
860 };
888 };
861 };
889 };
862 "wordwrapjs-1.2.1" = {
890 "wordwrapjs-1.2.1" = {
863 name = "wordwrapjs";
891 name = "wordwrapjs";
864 packageName = "wordwrapjs";
892 packageName = "wordwrapjs";
865 version = "1.2.1";
893 version = "1.2.1";
866 src = fetchurl {
894 src = fetchurl {
867 url = "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-1.2.1.tgz";
895 url = "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-1.2.1.tgz";
868 sha1 = "754a5ea0664cfbff50540dc32d67bda3289fc34b";
896 sha1 = "754a5ea0664cfbff50540dc32d67bda3289fc34b";
869 };
897 };
870 };
898 };
871 "collect-all-0.2.1" = {
899 "collect-all-0.2.1" = {
872 name = "collect-all";
900 name = "collect-all";
873 packageName = "collect-all";
901 packageName = "collect-all";
874 version = "0.2.1";
902 version = "0.2.1";
875 src = fetchurl {
903 src = fetchurl {
876 url = "https://registry.npmjs.org/collect-all/-/collect-all-0.2.1.tgz";
904 url = "https://registry.npmjs.org/collect-all/-/collect-all-0.2.1.tgz";
877 sha1 = "7225fb4585c22d4ffac886f0abaf5abc563a1a6a";
905 sha1 = "7225fb4585c22d4ffac886f0abaf5abc563a1a6a";
878 };
906 };
879 };
907 };
880 "stream-connect-1.0.2" = {
908 "stream-connect-1.0.2" = {
881 name = "stream-connect";
909 name = "stream-connect";
882 packageName = "stream-connect";
910 packageName = "stream-connect";
883 version = "1.0.2";
911 version = "1.0.2";
884 src = fetchurl {
912 src = fetchurl {
885 url = "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz";
913 url = "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz";
886 sha1 = "18bc81f2edb35b8b5d9a8009200a985314428a97";
914 sha1 = "18bc81f2edb35b8b5d9a8009200a985314428a97";
887 };
915 };
888 };
916 };
889 "stream-via-0.1.1" = {
917 "stream-via-0.1.1" = {
890 name = "stream-via";
918 name = "stream-via";
891 packageName = "stream-via";
919 packageName = "stream-via";
892 version = "0.1.1";
920 version = "0.1.1";
893 src = fetchurl {
921 src = fetchurl {
894 url = "https://registry.npmjs.org/stream-via/-/stream-via-0.1.1.tgz";
922 url = "https://registry.npmjs.org/stream-via/-/stream-via-0.1.1.tgz";
895 sha1 = "0cee5df9c959fb1d3f4eda4819f289d5f9205afc";
923 sha1 = "0cee5df9c959fb1d3f4eda4819f289d5f9205afc";
896 };
924 };
897 };
925 };
898 "collect-json-1.0.8" = {
926 "collect-json-1.0.8" = {
899 name = "collect-json";
927 name = "collect-json";
900 packageName = "collect-json";
928 packageName = "collect-json";
901 version = "1.0.8";
929 version = "1.0.8";
902 src = fetchurl {
930 src = fetchurl {
903 url = "https://registry.npmjs.org/collect-json/-/collect-json-1.0.8.tgz";
931 url = "https://registry.npmjs.org/collect-json/-/collect-json-1.0.8.tgz";
904 sha1 = "aa2fa52b4d1d9444ce690f07a1e3617ab74bb827";
932 sha1 = "aa2fa52b4d1d9444ce690f07a1e3617ab74bb827";
905 };
933 };
906 };
934 };
907 "deep-extend-0.4.1" = {
935 "deep-extend-0.4.1" = {
908 name = "deep-extend";
936 name = "deep-extend";
909 packageName = "deep-extend";
937 packageName = "deep-extend";
910 version = "0.4.1";
938 version = "0.4.1";
911 src = fetchurl {
939 src = fetchurl {
912 url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz";
940 url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz";
913 sha1 = "efe4113d08085f4e6f9687759810f807469e2253";
941 sha1 = "efe4113d08085f4e6f9687759810f807469e2253";
914 };
942 };
915 };
943 };
916 "object-tools-2.0.6" = {
944 "object-tools-2.0.6" = {
917 name = "object-tools";
945 name = "object-tools";
918 packageName = "object-tools";
946 packageName = "object-tools";
919 version = "2.0.6";
947 version = "2.0.6";
920 src = fetchurl {
948 src = fetchurl {
921 url = "https://registry.npmjs.org/object-tools/-/object-tools-2.0.6.tgz";
949 url = "https://registry.npmjs.org/object-tools/-/object-tools-2.0.6.tgz";
922 sha1 = "f3fe1c350cda4a6f5d99d9646dc4892a02476ddd";
950 sha1 = "f3fe1c350cda4a6f5d99d9646dc4892a02476ddd";
923 };
951 };
924 };
952 };
925 "collect-all-1.0.2" = {
953 "collect-all-1.0.2" = {
926 name = "collect-all";
954 name = "collect-all";
927 packageName = "collect-all";
955 packageName = "collect-all";
928 version = "1.0.2";
956 version = "1.0.2";
929 src = fetchurl {
957 src = fetchurl {
930 url = "https://registry.npmjs.org/collect-all/-/collect-all-1.0.2.tgz";
958 url = "https://registry.npmjs.org/collect-all/-/collect-all-1.0.2.tgz";
931 sha1 = "39450f1e7aa6086570a006bce93ccf1218a77ea1";
959 sha1 = "39450f1e7aa6086570a006bce93ccf1218a77ea1";
932 };
960 };
933 };
961 };
934 "stream-via-1.0.3" = {
962 "stream-via-1.0.3" = {
935 name = "stream-via";
963 name = "stream-via";
936 packageName = "stream-via";
964 packageName = "stream-via";
937 version = "1.0.3";
965 version = "1.0.3";
938 src = fetchurl {
966 src = fetchurl {
939 url = "https://registry.npmjs.org/stream-via/-/stream-via-1.0.3.tgz";
967 url = "https://registry.npmjs.org/stream-via/-/stream-via-1.0.3.tgz";
940 sha1 = "cebd32a5a59d74b3b68e3404942e867184ad4ac9";
968 sha1 = "cebd32a5a59d74b3b68e3404942e867184ad4ac9";
941 };
969 };
942 };
970 };
943 "object-get-2.1.0" = {
971 "object-get-2.1.0" = {
944 name = "object-get";
972 name = "object-get";
945 packageName = "object-get";
973 packageName = "object-get";
946 version = "2.1.0";
974 version = "2.1.0";
947 src = fetchurl {
975 src = fetchurl {
948 url = "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz";
976 url = "https://registry.npmjs.org/object-get/-/object-get-2.1.0.tgz";
949 sha1 = "722bbdb60039efa47cad3c6dc2ce51a85c02c5ae";
977 sha1 = "722bbdb60039efa47cad3c6dc2ce51a85c02c5ae";
950 };
978 };
951 };
979 };
952 "test-value-1.1.0" = {
980 "test-value-1.1.0" = {
953 name = "test-value";
981 name = "test-value";
954 packageName = "test-value";
982 packageName = "test-value";
955 version = "1.1.0";
983 version = "1.1.0";
956 src = fetchurl {
984 src = fetchurl {
957 url = "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz";
985 url = "https://registry.npmjs.org/test-value/-/test-value-1.1.0.tgz";
958 sha1 = "a09136f72ec043d27c893707c2b159bfad7de93f";
986 sha1 = "a09136f72ec043d27c893707c2b159bfad7de93f";
959 };
987 };
960 };
988 };
961 "test-value-2.0.0" = {
989 "test-value-2.1.0" = {
962 name = "test-value";
990 name = "test-value";
963 packageName = "test-value";
991 packageName = "test-value";
964 version = "2.0.0";
992 version = "2.1.0";
965 src = fetchurl {
993 src = fetchurl {
966 url = "https://registry.npmjs.org/test-value/-/test-value-2.0.0.tgz";
994 url = "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz";
967 sha1 = "0d65c45ee0b48a757c4507a5e98ec2680a9db137";
995 sha1 = "11da6ff670f3471a73b625ca4f3fdcf7bb748291";
968 };
996 };
969 };
997 };
970 "@types/clone-0.1.29" = {
998 "@types/clone-0.1.30" = {
971 name = "@types/clone";
999 name = "@types/clone";
972 packageName = "@types/clone";
1000 packageName = "@types/clone";
973 version = "0.1.29";
1001 version = "0.1.30";
974 src = fetchurl {
1002 src = fetchurl {
975 url = "https://registry.npmjs.org/@types/clone/-/clone-0.1.29.tgz";
1003 url = "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz";
976 sha1 = "65a0be88189ffddcd373e450aa6b68c9c83218b7";
1004 sha1 = "e7365648c1b42136a59c7d5040637b3b5c83b614";
977 };
1005 };
978 };
1006 };
979 "@types/node-4.0.30" = {
1007 "@types/node-4.0.30" = {
980 name = "@types/node";
1008 name = "@types/node";
981 packageName = "@types/node";
1009 packageName = "@types/node";
982 version = "4.0.30";
1010 version = "4.0.30";
983 src = fetchurl {
1011 src = fetchurl {
984 url = "https://registry.npmjs.org/@types/node/-/node-4.0.30.tgz";
1012 url = "https://registry.npmjs.org/@types/node/-/node-4.0.30.tgz";
985 sha1 = "553f490ed3030311620f88003e7abfc0edcb301e";
1013 sha1 = "553f490ed3030311620f88003e7abfc0edcb301e";
986 };
1014 };
987 };
1015 };
988 "@types/parse5-0.0.28" = {
1016 "@types/parse5-0.0.31" = {
989 name = "@types/parse5";
1017 name = "@types/parse5";
990 packageName = "@types/parse5";
1018 packageName = "@types/parse5";
991 version = "0.0.28";
1019 version = "0.0.31";
992 src = fetchurl {
1020 src = fetchurl {
993 url = "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.28.tgz";
1021 url = "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.31.tgz";
994 sha1 = "2a38cb7145bb157688d4ad2c46944c6dffae3cc6";
1022 sha1 = "e827a493a443b156e1b582a2e4c3bdc0040f2ee7";
995 };
1023 };
996 };
1024 };
997 "clone-1.0.2" = {
1025 "clone-1.0.2" = {
998 name = "clone";
1026 name = "clone";
999 packageName = "clone";
1027 packageName = "clone";
1000 version = "1.0.2";
1028 version = "1.0.2";
1001 src = fetchurl {
1029 src = fetchurl {
1002 url = "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz";
1030 url = "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz";
1003 sha1 = "260b7a99ebb1edfe247538175f783243cb19d149";
1031 sha1 = "260b7a99ebb1edfe247538175f783243cb19d149";
1004 };
1032 };
1005 };
1033 };
1006 "parse5-1.5.1" = {
1034 "parse5-1.5.1" = {
1007 name = "parse5";
1035 name = "parse5";
1008 packageName = "parse5";
1036 packageName = "parse5";
1009 version = "1.5.1";
1037 version = "1.5.1";
1010 src = fetchurl {
1038 src = fetchurl {
1011 url = "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz";
1039 url = "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz";
1012 sha1 = "9b7f3b0de32be78dc2401b17573ccaf0f6f59d94";
1040 sha1 = "9b7f3b0de32be78dc2401b17573ccaf0f6f59d94";
1013 };
1041 };
1014 };
1042 };
1015 "@types/node-6.0.37" = {
1043 "@types/node-6.0.41" = {
1016 name = "@types/node";
1044 name = "@types/node";
1017 packageName = "@types/node";
1045 packageName = "@types/node";
1018 version = "6.0.37";
1046 version = "6.0.41";
1019 src = fetchurl {
1047 src = fetchurl {
1020 url = "https://registry.npmjs.org/@types/node/-/node-6.0.37.tgz";
1048 url = "https://registry.npmjs.org/@types/node/-/node-6.0.41.tgz";
1021 sha1 = "a1e081f2ec60074113d3a1fbf11f35d304f30e39";
1049 sha1 = "578cf53aaec65887bcaf16792f8722932e8ff8ea";
1022 };
1050 };
1023 };
1051 };
1024 "es6-promise-2.3.0" = {
1052 "es6-promise-2.3.0" = {
1025 name = "es6-promise";
1053 name = "es6-promise";
1026 packageName = "es6-promise";
1054 packageName = "es6-promise";
1027 version = "2.3.0";
1055 version = "2.3.0";
1028 src = fetchurl {
1056 src = fetchurl {
1029 url = "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz";
1057 url = "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz";
1030 sha1 = "96edb9f2fdb01995822b263dd8aadab6748181bc";
1058 sha1 = "96edb9f2fdb01995822b263dd8aadab6748181bc";
1031 };
1059 };
1032 };
1060 };
1033 "hydrolysis-1.24.1" = {
1061 "hydrolysis-1.24.1" = {
1034 name = "hydrolysis";
1062 name = "hydrolysis";
1035 packageName = "hydrolysis";
1063 packageName = "hydrolysis";
1036 version = "1.24.1";
1064 version = "1.24.1";
1037 src = fetchurl {
1065 src = fetchurl {
1038 url = "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.24.1.tgz";
1066 url = "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.24.1.tgz";
1039 sha1 = "0f94f055d1065ac0d81ff40b762d143fef07eff4";
1067 sha1 = "0f94f055d1065ac0d81ff40b762d143fef07eff4";
1040 };
1068 };
1041 };
1069 };
1042 "nopt-3.0.6" = {
1070 "nopt-3.0.6" = {
1043 name = "nopt";
1071 name = "nopt";
1044 packageName = "nopt";
1072 packageName = "nopt";
1045 version = "3.0.6";
1073 version = "3.0.6";
1046 src = fetchurl {
1074 src = fetchurl {
1047 url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
1075 url = "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz";
1048 sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
1076 sha1 = "c6465dbf08abcd4db359317f79ac68a646b28ff9";
1049 };
1077 };
1050 };
1078 };
1051 "path-posix-1.0.0" = {
1079 "path-posix-1.0.0" = {
1052 name = "path-posix";
1080 name = "path-posix";
1053 packageName = "path-posix";
1081 packageName = "path-posix";
1054 version = "1.0.0";
1082 version = "1.0.0";
1055 src = fetchurl {
1083 src = fetchurl {
1056 url = "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz";
1084 url = "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz";
1057 sha1 = "06b26113f56beab042545a23bfa88003ccac260f";
1085 sha1 = "06b26113f56beab042545a23bfa88003ccac260f";
1058 };
1086 };
1059 };
1087 };
1060 "update-notifier-0.6.3" = {
1088 "update-notifier-0.6.3" = {
1061 name = "update-notifier";
1089 name = "update-notifier";
1062 packageName = "update-notifier";
1090 packageName = "update-notifier";
1063 version = "0.6.3";
1091 version = "0.6.3";
1064 src = fetchurl {
1092 src = fetchurl {
1065 url = "https://registry.npmjs.org/update-notifier/-/update-notifier-0.6.3.tgz";
1093 url = "https://registry.npmjs.org/update-notifier/-/update-notifier-0.6.3.tgz";
1066 sha1 = "776dec8daa13e962a341e8a1d98354306b67ae08";
1094 sha1 = "776dec8daa13e962a341e8a1d98354306b67ae08";
1067 };
1095 };
1068 };
1096 };
1069 "babel-polyfill-6.13.0" = {
1097 "babel-polyfill-6.13.0" = {
1070 name = "babel-polyfill";
1098 name = "babel-polyfill";
1071 packageName = "babel-polyfill";
1099 packageName = "babel-polyfill";
1072 version = "6.13.0";
1100 version = "6.13.0";
1073 src = fetchurl {
1101 src = fetchurl {
1074 url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.13.0.tgz";
1102 url = "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.13.0.tgz";
1075 sha1 = "5978215c25d49a697eb78afc54e63c9d3a73d5ec";
1103 sha1 = "5978215c25d49a697eb78afc54e63c9d3a73d5ec";
1076 };
1104 };
1077 };
1105 };
1078 "doctrine-0.7.2" = {
1106 "doctrine-0.7.2" = {
1079 name = "doctrine";
1107 name = "doctrine";
1080 packageName = "doctrine";
1108 packageName = "doctrine";
1081 version = "0.7.2";
1109 version = "0.7.2";
1082 src = fetchurl {
1110 src = fetchurl {
1083 url = "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz";
1111 url = "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz";
1084 sha1 = "7cb860359ba3be90e040b26b729ce4bfa654c523";
1112 sha1 = "7cb860359ba3be90e040b26b729ce4bfa654c523";
1085 };
1113 };
1086 };
1114 };
1087 "escodegen-1.8.1" = {
1115 "escodegen-1.8.1" = {
1088 name = "escodegen";
1116 name = "escodegen";
1089 packageName = "escodegen";
1117 packageName = "escodegen";
1090 version = "1.8.1";
1118 version = "1.8.1";
1091 src = fetchurl {
1119 src = fetchurl {
1092 url = "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz";
1120 url = "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz";
1093 sha1 = "5a5b53af4693110bebb0867aa3430dd3b70a1018";
1121 sha1 = "5a5b53af4693110bebb0867aa3430dd3b70a1018";
1094 };
1122 };
1095 };
1123 };
1096 "espree-3.1.7" = {
1124 "espree-3.3.1" = {
1097 name = "espree";
1125 name = "espree";
1098 packageName = "espree";
1126 packageName = "espree";
1099 version = "3.1.7";
1127 version = "3.3.1";
1100 src = fetchurl {
1128 src = fetchurl {
1101 url = "https://registry.npmjs.org/espree/-/espree-3.1.7.tgz";
1129 url = "https://registry.npmjs.org/espree/-/espree-3.3.1.tgz";
1102 sha1 = "fd5deec76a97a5120a9cd3a7cb1177a0923b11d2";
1130 sha1 = "42107376856738a65ff3b5877f3a58bd52497643";
1103 };
1131 };
1104 };
1132 };
1105 "estraverse-3.1.0" = {
1133 "estraverse-3.1.0" = {
1106 name = "estraverse";
1134 name = "estraverse";
1107 packageName = "estraverse";
1135 packageName = "estraverse";
1108 version = "3.1.0";
1136 version = "3.1.0";
1109 src = fetchurl {
1137 src = fetchurl {
1110 url = "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz";
1138 url = "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz";
1111 sha1 = "15e28a446b8b82bc700ccc8b96c78af4da0d6cba";
1139 sha1 = "15e28a446b8b82bc700ccc8b96c78af4da0d6cba";
1112 };
1140 };
1113 };
1141 };
1114 "path-is-absolute-1.0.0" = {
1142 "path-is-absolute-1.0.0" = {
1115 name = "path-is-absolute";
1143 name = "path-is-absolute";
1116 packageName = "path-is-absolute";
1144 packageName = "path-is-absolute";
1117 version = "1.0.0";
1145 version = "1.0.0";
1118 src = fetchurl {
1146 src = fetchurl {
1119 url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz";
1147 url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz";
1120 sha1 = "263dada66ab3f2fb10bf7f9d24dd8f3e570ef912";
1148 sha1 = "263dada66ab3f2fb10bf7f9d24dd8f3e570ef912";
1121 };
1149 };
1122 };
1150 };
1123 "babel-runtime-6.11.6" = {
1151 "babel-runtime-6.11.6" = {
1124 name = "babel-runtime";
1152 name = "babel-runtime";
1125 packageName = "babel-runtime";
1153 packageName = "babel-runtime";
1126 version = "6.11.6";
1154 version = "6.11.6";
1127 src = fetchurl {
1155 src = fetchurl {
1128 url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.11.6.tgz";
1156 url = "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.11.6.tgz";
1129 sha1 = "6db707fef2d49c49bfa3cb64efdb436b518b8222";
1157 sha1 = "6db707fef2d49c49bfa3cb64efdb436b518b8222";
1130 };
1158 };
1131 };
1159 };
1132 "regenerator-runtime-0.9.5" = {
1160 "regenerator-runtime-0.9.5" = {
1133 name = "regenerator-runtime";
1161 name = "regenerator-runtime";
1134 packageName = "regenerator-runtime";
1162 packageName = "regenerator-runtime";
1135 version = "0.9.5";
1163 version = "0.9.5";
1136 src = fetchurl {
1164 src = fetchurl {
1137 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz";
1165 url = "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.5.tgz";
1138 sha1 = "403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc";
1166 sha1 = "403d6d40a4bdff9c330dd9392dcbb2d9a8bba1fc";
1139 };
1167 };
1140 };
1168 };
1141 "esutils-1.1.6" = {
1169 "esutils-1.1.6" = {
1142 name = "esutils";
1170 name = "esutils";
1143 packageName = "esutils";
1171 packageName = "esutils";
1144 version = "1.1.6";
1172 version = "1.1.6";
1145 src = fetchurl {
1173 src = fetchurl {
1146 url = "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz";
1174 url = "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz";
1147 sha1 = "c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375";
1175 sha1 = "c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375";
1148 };
1176 };
1149 };
1177 };
1150 "isarray-0.0.1" = {
1178 "isarray-0.0.1" = {
1151 name = "isarray";
1179 name = "isarray";
1152 packageName = "isarray";
1180 packageName = "isarray";
1153 version = "0.0.1";
1181 version = "0.0.1";
1154 src = fetchurl {
1182 src = fetchurl {
1155 url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
1183 url = "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz";
1156 sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
1184 sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
1157 };
1185 };
1158 };
1186 };
1159 "estraverse-1.9.3" = {
1187 "estraverse-1.9.3" = {
1160 name = "estraverse";
1188 name = "estraverse";
1161 packageName = "estraverse";
1189 packageName = "estraverse";
1162 version = "1.9.3";
1190 version = "1.9.3";
1163 src = fetchurl {
1191 src = fetchurl {
1164 url = "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz";
1192 url = "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz";
1165 sha1 = "af67f2dc922582415950926091a4005d29c9bb44";
1193 sha1 = "af67f2dc922582415950926091a4005d29c9bb44";
1166 };
1194 };
1167 };
1195 };
1168 "esutils-2.0.2" = {
1196 "esutils-2.0.2" = {
1169 name = "esutils";
1197 name = "esutils";
1170 packageName = "esutils";
1198 packageName = "esutils";
1171 version = "2.0.2";
1199 version = "2.0.2";
1172 src = fetchurl {
1200 src = fetchurl {
1173 url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";
1201 url = "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";
1174 sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
1202 sha1 = "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b";
1175 };
1203 };
1176 };
1204 };
1177 "esprima-2.7.3" = {
1205 "esprima-2.7.3" = {
1178 name = "esprima";
1206 name = "esprima";
1179 packageName = "esprima";
1207 packageName = "esprima";
1180 version = "2.7.3";
1208 version = "2.7.3";
1181 src = fetchurl {
1209 src = fetchurl {
1182 url = "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz";
1210 url = "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz";
1183 sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581";
1211 sha1 = "96e3b70d5779f6ad49cd032673d1c312767ba581";
1184 };
1212 };
1185 };
1213 };
1186 "optionator-0.8.1" = {
1214 "optionator-0.8.2" = {
1187 name = "optionator";
1215 name = "optionator";
1188 packageName = "optionator";
1216 packageName = "optionator";
1189 version = "0.8.1";
1217 version = "0.8.2";
1190 src = fetchurl {
1218 src = fetchurl {
1191 url = "https://registry.npmjs.org/optionator/-/optionator-0.8.1.tgz";
1219 url = "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz";
1192 sha1 = "e31b4932cdd5fb862a8b0d10bc63d3ee1ec7d78b";
1220 sha1 = "364c5e409d3f4d6301d6c0b4c05bba50180aeb64";
1193 };
1221 };
1194 };
1222 };
1195 "source-map-0.2.0" = {
1223 "source-map-0.2.0" = {
1196 name = "source-map";
1224 name = "source-map";
1197 packageName = "source-map";
1225 packageName = "source-map";
1198 version = "0.2.0";
1226 version = "0.2.0";
1199 src = fetchurl {
1227 src = fetchurl {
1200 url = "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz";
1228 url = "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz";
1201 sha1 = "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d";
1229 sha1 = "dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d";
1202 };
1230 };
1203 };
1231 };
1204 "prelude-ls-1.1.2" = {
1232 "prelude-ls-1.1.2" = {
1205 name = "prelude-ls";
1233 name = "prelude-ls";
1206 packageName = "prelude-ls";
1234 packageName = "prelude-ls";
1207 version = "1.1.2";
1235 version = "1.1.2";
1208 src = fetchurl {
1236 src = fetchurl {
1209 url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
1237 url = "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";
1210 sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
1238 sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
1211 };
1239 };
1212 };
1240 };
1213 "deep-is-0.1.3" = {
1241 "deep-is-0.1.3" = {
1214 name = "deep-is";
1242 name = "deep-is";
1215 packageName = "deep-is";
1243 packageName = "deep-is";
1216 version = "0.1.3";
1244 version = "0.1.3";
1217 src = fetchurl {
1245 src = fetchurl {
1218 url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
1246 url = "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";
1219 sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
1247 sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
1220 };
1248 };
1221 };
1249 };
1222 "wordwrap-1.0.0" = {
1250 "wordwrap-1.0.0" = {
1223 name = "wordwrap";
1251 name = "wordwrap";
1224 packageName = "wordwrap";
1252 packageName = "wordwrap";
1225 version = "1.0.0";
1253 version = "1.0.0";
1226 src = fetchurl {
1254 src = fetchurl {
1227 url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
1255 url = "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";
1228 sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
1256 sha1 = "27584810891456a4171c8d0226441ade90cbcaeb";
1229 };
1257 };
1230 };
1258 };
1231 "type-check-0.3.2" = {
1259 "type-check-0.3.2" = {
1232 name = "type-check";
1260 name = "type-check";
1233 packageName = "type-check";
1261 packageName = "type-check";
1234 version = "0.3.2";
1262 version = "0.3.2";
1235 src = fetchurl {
1263 src = fetchurl {
1236 url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
1264 url = "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";
1237 sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
1265 sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
1238 };
1266 };
1239 };
1267 };
1240 "levn-0.3.0" = {
1268 "levn-0.3.0" = {
1241 name = "levn";
1269 name = "levn";
1242 packageName = "levn";
1270 packageName = "levn";
1243 version = "0.3.0";
1271 version = "0.3.0";
1244 src = fetchurl {
1272 src = fetchurl {
1245 url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
1273 url = "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";
1246 sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
1274 sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
1247 };
1275 };
1248 };
1276 };
1249 "fast-levenshtein-1.1.4" = {
1277 "fast-levenshtein-2.0.4" = {
1250 name = "fast-levenshtein";
1278 name = "fast-levenshtein";
1251 packageName = "fast-levenshtein";
1279 packageName = "fast-levenshtein";
1252 version = "1.1.4";
1280 version = "2.0.4";
1281 src = fetchurl {
1282 url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.4.tgz";
1283 sha1 = "e31e729eea62233c60a7bc9dce2bdcc88b4fffe3";
1284 };
1285 };
1286 "acorn-4.0.3" = {
1287 name = "acorn";
1288 packageName = "acorn";
1289 version = "4.0.3";
1253 src = fetchurl {
1290 src = fetchurl {
1254 url = "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz";
1291 url = "https://registry.npmjs.org/acorn/-/acorn-4.0.3.tgz";
1255 sha1 = "e6a754cc8f15e58987aa9cbd27af66fd6f4e5af9";
1292 sha1 = "1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1";
1293 };
1294 };
1295 "acorn-jsx-3.0.1" = {
1296 name = "acorn-jsx";
1297 packageName = "acorn-jsx";
1298 version = "3.0.1";
1299 src = fetchurl {
1300 url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
1301 sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
1256 };
1302 };
1257 };
1303 };
1258 "acorn-3.3.0" = {
1304 "acorn-3.3.0" = {
1259 name = "acorn";
1305 name = "acorn";
1260 packageName = "acorn";
1306 packageName = "acorn";
1261 version = "3.3.0";
1307 version = "3.3.0";
1262 src = fetchurl {
1308 src = fetchurl {
1263 url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
1309 url = "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz";
1264 sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
1310 sha1 = "45e37fb39e8da3f25baee3ff5369e2bb5f22017a";
1265 };
1311 };
1266 };
1312 };
1267 "acorn-jsx-3.0.1" = {
1268 name = "acorn-jsx";
1269 packageName = "acorn-jsx";
1270 version = "3.0.1";
1271 src = fetchurl {
1272 url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz";
1273 sha1 = "afdf9488fb1ecefc8348f6fb22f464e32a58b36b";
1274 };
1275 };
1276 "boxen-0.3.1" = {
1313 "boxen-0.3.1" = {
1277 name = "boxen";
1314 name = "boxen";
1278 packageName = "boxen";
1315 packageName = "boxen";
1279 version = "0.3.1";
1316 version = "0.3.1";
1280 src = fetchurl {
1317 src = fetchurl {
1281 url = "https://registry.npmjs.org/boxen/-/boxen-0.3.1.tgz";
1318 url = "https://registry.npmjs.org/boxen/-/boxen-0.3.1.tgz";
1282 sha1 = "a7d898243ae622f7abb6bb604d740a76c6a5461b";
1319 sha1 = "a7d898243ae622f7abb6bb604d740a76c6a5461b";
1283 };
1320 };
1284 };
1321 };
1285 "configstore-2.0.0" = {
1322 "configstore-2.1.0" = {
1286 name = "configstore";
1323 name = "configstore";
1287 packageName = "configstore";
1324 packageName = "configstore";
1288 version = "2.0.0";
1325 version = "2.1.0";
1289 src = fetchurl {
1326 src = fetchurl {
1290 url = "https://registry.npmjs.org/configstore/-/configstore-2.0.0.tgz";
1327 url = "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz";
1291 sha1 = "8d81e9cdfa73ebd0e06bc985147856b2f1c4e764";
1328 sha1 = "737a3a7036e9886102aa6099e47bb33ab1aba1a1";
1292 };
1329 };
1293 };
1330 };
1294 "is-npm-1.0.0" = {
1331 "is-npm-1.0.0" = {
1295 name = "is-npm";
1332 name = "is-npm";
1296 packageName = "is-npm";
1333 packageName = "is-npm";
1297 version = "1.0.0";
1334 version = "1.0.0";
1298 src = fetchurl {
1335 src = fetchurl {
1299 url = "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz";
1336 url = "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz";
1300 sha1 = "f2fb63a65e4905b406c86072765a1a4dc793b9f4";
1337 sha1 = "f2fb63a65e4905b406c86072765a1a4dc793b9f4";
1301 };
1338 };
1302 };
1339 };
1303 "latest-version-2.0.0" = {
1340 "latest-version-2.0.0" = {
1304 name = "latest-version";
1341 name = "latest-version";
1305 packageName = "latest-version";
1342 packageName = "latest-version";
1306 version = "2.0.0";
1343 version = "2.0.0";
1307 src = fetchurl {
1344 src = fetchurl {
1308 url = "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz";
1345 url = "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz";
1309 sha1 = "56f8d6139620847b8017f8f1f4d78e211324168b";
1346 sha1 = "56f8d6139620847b8017f8f1f4d78e211324168b";
1310 };
1347 };
1311 };
1348 };
1312 "semver-diff-2.1.0" = {
1349 "semver-diff-2.1.0" = {
1313 name = "semver-diff";
1350 name = "semver-diff";
1314 packageName = "semver-diff";
1351 packageName = "semver-diff";
1315 version = "2.1.0";
1352 version = "2.1.0";
1316 src = fetchurl {
1353 src = fetchurl {
1317 url = "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz";
1354 url = "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz";
1318 sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36";
1355 sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36";
1319 };
1356 };
1320 };
1357 };
1321 "filled-array-1.1.0" = {
1358 "filled-array-1.1.0" = {
1322 name = "filled-array";
1359 name = "filled-array";
1323 packageName = "filled-array";
1360 packageName = "filled-array";
1324 version = "1.1.0";
1361 version = "1.1.0";
1325 src = fetchurl {
1362 src = fetchurl {
1326 url = "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz";
1363 url = "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz";
1327 sha1 = "c3c4f6c663b923459a9aa29912d2d031f1507f84";
1364 sha1 = "c3c4f6c663b923459a9aa29912d2d031f1507f84";
1328 };
1365 };
1329 };
1366 };
1330 "object-assign-4.1.0" = {
1367 "object-assign-4.1.0" = {
1331 name = "object-assign";
1368 name = "object-assign";
1332 packageName = "object-assign";
1369 packageName = "object-assign";
1333 version = "4.1.0";
1370 version = "4.1.0";
1334 src = fetchurl {
1371 src = fetchurl {
1335 url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz";
1372 url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz";
1336 sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0";
1373 sha1 = "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0";
1337 };
1374 };
1338 };
1375 };
1339 "repeating-2.0.1" = {
1376 "repeating-2.0.1" = {
1340 name = "repeating";
1377 name = "repeating";
1341 packageName = "repeating";
1378 packageName = "repeating";
1342 version = "2.0.1";
1379 version = "2.0.1";
1343 src = fetchurl {
1380 src = fetchurl {
1344 url = "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz";
1381 url = "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz";
1345 sha1 = "5214c53a926d3552707527fbab415dbc08d06dda";
1382 sha1 = "5214c53a926d3552707527fbab415dbc08d06dda";
1346 };
1383 };
1347 };
1384 };
1348 "string-width-1.0.2" = {
1385 "string-width-1.0.2" = {
1349 name = "string-width";
1386 name = "string-width";
1350 packageName = "string-width";
1387 packageName = "string-width";
1351 version = "1.0.2";
1388 version = "1.0.2";
1352 src = fetchurl {
1389 src = fetchurl {
1353 url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
1390 url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
1354 sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
1391 sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
1355 };
1392 };
1356 };
1393 };
1357 "widest-line-1.0.0" = {
1394 "widest-line-1.0.0" = {
1358 name = "widest-line";
1395 name = "widest-line";
1359 packageName = "widest-line";
1396 packageName = "widest-line";
1360 version = "1.0.0";
1397 version = "1.0.0";
1361 src = fetchurl {
1398 src = fetchurl {
1362 url = "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz";
1399 url = "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz";
1363 sha1 = "0c09c85c2a94683d0d7eaf8ee097d564bf0e105c";
1400 sha1 = "0c09c85c2a94683d0d7eaf8ee097d564bf0e105c";
1364 };
1401 };
1365 };
1402 };
1366 "is-finite-1.0.1" = {
1403 "is-finite-1.0.1" = {
1367 name = "is-finite";
1404 name = "is-finite";
1368 packageName = "is-finite";
1405 packageName = "is-finite";
1369 version = "1.0.1";
1406 version = "1.0.1";
1370 src = fetchurl {
1407 src = fetchurl {
1371 url = "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz";
1408 url = "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz";
1372 sha1 = "6438603eaebe2793948ff4a4262ec8db3d62597b";
1409 sha1 = "6438603eaebe2793948ff4a4262ec8db3d62597b";
1373 };
1410 };
1374 };
1411 };
1375 "number-is-nan-1.0.0" = {
1412 "number-is-nan-1.0.0" = {
1376 name = "number-is-nan";
1413 name = "number-is-nan";
1377 packageName = "number-is-nan";
1414 packageName = "number-is-nan";
1378 version = "1.0.0";
1415 version = "1.0.0";
1379 src = fetchurl {
1416 src = fetchurl {
1380 url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";
1417 url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz";
1381 sha1 = "c020f529c5282adfdd233d91d4b181c3d686dc4b";
1418 sha1 = "c020f529c5282adfdd233d91d4b181c3d686dc4b";
1382 };
1419 };
1383 };
1420 };
1384 "code-point-at-1.0.0" = {
1421 "code-point-at-1.0.0" = {
1385 name = "code-point-at";
1422 name = "code-point-at";
1386 packageName = "code-point-at";
1423 packageName = "code-point-at";
1387 version = "1.0.0";
1424 version = "1.0.0";
1388 src = fetchurl {
1425 src = fetchurl {
1389 url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.0.0.tgz";
1426 url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.0.0.tgz";
1390 sha1 = "f69b192d3f7d91e382e4b71bddb77878619ab0c6";
1427 sha1 = "f69b192d3f7d91e382e4b71bddb77878619ab0c6";
1391 };
1428 };
1392 };
1429 };
1393 "is-fullwidth-code-point-1.0.0" = {
1430 "is-fullwidth-code-point-1.0.0" = {
1394 name = "is-fullwidth-code-point";
1431 name = "is-fullwidth-code-point";
1395 packageName = "is-fullwidth-code-point";
1432 packageName = "is-fullwidth-code-point";
1396 version = "1.0.0";
1433 version = "1.0.0";
1397 src = fetchurl {
1434 src = fetchurl {
1398 url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
1435 url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
1399 sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
1436 sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
1400 };
1437 };
1401 };
1438 };
1402 "dot-prop-2.4.0" = {
1439 "dot-prop-3.0.0" = {
1403 name = "dot-prop";
1440 name = "dot-prop";
1404 packageName = "dot-prop";
1441 packageName = "dot-prop";
1405 version = "2.4.0";
1442 version = "3.0.0";
1406 src = fetchurl {
1443 src = fetchurl {
1407 url = "https://registry.npmjs.org/dot-prop/-/dot-prop-2.4.0.tgz";
1444 url = "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz";
1408 sha1 = "848e28f7f1d50740c6747ab3cb07670462b6f89c";
1445 sha1 = "1b708af094a49c9a0e7dbcad790aba539dac1177";
1409 };
1446 };
1410 };
1447 };
1411 "os-tmpdir-1.0.1" = {
1448 "os-tmpdir-1.0.1" = {
1412 name = "os-tmpdir";
1449 name = "os-tmpdir";
1413 packageName = "os-tmpdir";
1450 packageName = "os-tmpdir";
1414 version = "1.0.1";
1451 version = "1.0.1";
1415 src = fetchurl {
1452 src = fetchurl {
1416 url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz";
1453 url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz";
1417 sha1 = "e9b423a1edaf479882562e92ed71d7743a071b6e";
1454 sha1 = "e9b423a1edaf479882562e92ed71d7743a071b6e";
1418 };
1455 };
1419 };
1456 };
1420 "osenv-0.1.3" = {
1457 "osenv-0.1.3" = {
1421 name = "osenv";
1458 name = "osenv";
1422 packageName = "osenv";
1459 packageName = "osenv";
1423 version = "0.1.3";
1460 version = "0.1.3";
1424 src = fetchurl {
1461 src = fetchurl {
1425 url = "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz";
1462 url = "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz";
1426 sha1 = "83cf05c6d6458fc4d5ac6362ea325d92f2754217";
1463 sha1 = "83cf05c6d6458fc4d5ac6362ea325d92f2754217";
1427 };
1464 };
1428 };
1465 };
1429 "uuid-2.0.2" = {
1466 "uuid-2.0.3" = {
1430 name = "uuid";
1467 name = "uuid";
1431 packageName = "uuid";
1468 packageName = "uuid";
1432 version = "2.0.2";
1469 version = "2.0.3";
1433 src = fetchurl {
1470 src = fetchurl {
1434 url = "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz";
1471 url = "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz";
1435 sha1 = "48bd5698f0677e3c7901a1c46ef15b1643794726";
1472 sha1 = "67e2e863797215530dff318e5bf9dcebfd47b21a";
1436 };
1473 };
1437 };
1474 };
1438 "write-file-atomic-1.2.0" = {
1475 "write-file-atomic-1.2.0" = {
1439 name = "write-file-atomic";
1476 name = "write-file-atomic";
1440 packageName = "write-file-atomic";
1477 packageName = "write-file-atomic";
1441 version = "1.2.0";
1478 version = "1.2.0";
1442 src = fetchurl {
1479 src = fetchurl {
1443 url = "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.2.0.tgz";
1480 url = "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.2.0.tgz";
1444 sha1 = "14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab";
1481 sha1 = "14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab";
1445 };
1482 };
1446 };
1483 };
1447 "xdg-basedir-2.0.0" = {
1484 "xdg-basedir-2.0.0" = {
1448 name = "xdg-basedir";
1485 name = "xdg-basedir";
1449 packageName = "xdg-basedir";
1486 packageName = "xdg-basedir";
1450 version = "2.0.0";
1487 version = "2.0.0";
1451 src = fetchurl {
1488 src = fetchurl {
1452 url = "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz";
1489 url = "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz";
1453 sha1 = "edbc903cc385fc04523d966a335504b5504d1bd2";
1490 sha1 = "edbc903cc385fc04523d966a335504b5504d1bd2";
1454 };
1491 };
1455 };
1492 };
1456 "is-obj-1.0.1" = {
1493 "is-obj-1.0.1" = {
1457 name = "is-obj";
1494 name = "is-obj";
1458 packageName = "is-obj";
1495 packageName = "is-obj";
1459 version = "1.0.1";
1496 version = "1.0.1";
1460 src = fetchurl {
1497 src = fetchurl {
1461 url = "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz";
1498 url = "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz";
1462 sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f";
1499 sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f";
1463 };
1500 };
1464 };
1501 };
1465 "os-homedir-1.0.1" = {
1502 "os-homedir-1.0.1" = {
1466 name = "os-homedir";
1503 name = "os-homedir";
1467 packageName = "os-homedir";
1504 packageName = "os-homedir";
1468 version = "1.0.1";
1505 version = "1.0.1";
1469 src = fetchurl {
1506 src = fetchurl {
1470 url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz";
1507 url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz";
1471 sha1 = "0d62bdf44b916fd3bbdcf2cab191948fb094f007";
1508 sha1 = "0d62bdf44b916fd3bbdcf2cab191948fb094f007";
1472 };
1509 };
1473 };
1510 };
1474 "imurmurhash-0.1.4" = {
1511 "imurmurhash-0.1.4" = {
1475 name = "imurmurhash";
1512 name = "imurmurhash";
1476 packageName = "imurmurhash";
1513 packageName = "imurmurhash";
1477 version = "0.1.4";
1514 version = "0.1.4";
1478 src = fetchurl {
1515 src = fetchurl {
1479 url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
1516 url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
1480 sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
1517 sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
1481 };
1518 };
1482 };
1519 };
1483 "slide-1.1.6" = {
1520 "slide-1.1.6" = {
1484 name = "slide";
1521 name = "slide";
1485 packageName = "slide";
1522 packageName = "slide";
1486 version = "1.1.6";
1523 version = "1.1.6";
1487 src = fetchurl {
1524 src = fetchurl {
1488 url = "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz";
1525 url = "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz";
1489 sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707";
1526 sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707";
1490 };
1527 };
1491 };
1528 };
1492 "package-json-2.3.3" = {
1529 "package-json-2.4.0" = {
1493 name = "package-json";
1530 name = "package-json";
1494 packageName = "package-json";
1531 packageName = "package-json";
1495 version = "2.3.3";
1532 version = "2.4.0";
1496 src = fetchurl {
1533 src = fetchurl {
1497 url = "https://registry.npmjs.org/package-json/-/package-json-2.3.3.tgz";
1534 url = "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz";
1498 sha1 = "14895311a963d18edf8801e06b67ea87795d15b9";
1535 sha1 = "0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb";
1499 };
1536 };
1500 };
1537 };
1501 "got-5.6.0" = {
1538 "got-5.6.0" = {
1502 name = "got";
1539 name = "got";
1503 packageName = "got";
1540 packageName = "got";
1504 version = "5.6.0";
1541 version = "5.6.0";
1505 src = fetchurl {
1542 src = fetchurl {
1506 url = "https://registry.npmjs.org/got/-/got-5.6.0.tgz";
1543 url = "https://registry.npmjs.org/got/-/got-5.6.0.tgz";
1507 sha1 = "bb1d7ee163b78082bbc8eb836f3f395004ea6fbf";
1544 sha1 = "bb1d7ee163b78082bbc8eb836f3f395004ea6fbf";
1508 };
1545 };
1509 };
1546 };
1510 "rc-1.1.6" = {
1547 "registry-auth-token-3.0.1" = {
1511 name = "rc";
1548 name = "registry-auth-token";
1512 packageName = "rc";
1549 packageName = "registry-auth-token";
1513 version = "1.1.6";
1550 version = "3.0.1";
1514 src = fetchurl {
1551 src = fetchurl {
1515 url = "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz";
1552 url = "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.0.1.tgz";
1516 sha1 = "43651b76b6ae53b5c802f1151fa3fc3b059969c9";
1553 sha1 = "c3ee5ec585bce29f88bf41629a3944c71ed53e25";
1517 };
1554 };
1518 };
1555 };
1519 "registry-url-3.1.0" = {
1556 "registry-url-3.1.0" = {
1520 name = "registry-url";
1557 name = "registry-url";
1521 packageName = "registry-url";
1558 packageName = "registry-url";
1522 version = "3.1.0";
1559 version = "3.1.0";
1523 src = fetchurl {
1560 src = fetchurl {
1524 url = "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz";
1561 url = "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz";
1525 sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942";
1562 sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942";
1526 };
1563 };
1527 };
1564 };
1528 "semver-5.3.0" = {
1565 "semver-5.3.0" = {
1529 name = "semver";
1566 name = "semver";
1530 packageName = "semver";
1567 packageName = "semver";
1531 version = "5.3.0";
1568 version = "5.3.0";
1532 src = fetchurl {
1569 src = fetchurl {
1533 url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz";
1570 url = "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz";
1534 sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f";
1571 sha1 = "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f";
1535 };
1572 };
1536 };
1573 };
1537 "create-error-class-3.0.2" = {
1574 "create-error-class-3.0.2" = {
1538 name = "create-error-class";
1575 name = "create-error-class";
1539 packageName = "create-error-class";
1576 packageName = "create-error-class";
1540 version = "3.0.2";
1577 version = "3.0.2";
1541 src = fetchurl {
1578 src = fetchurl {
1542 url = "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz";
1579 url = "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz";
1543 sha1 = "06be7abef947a3f14a30fd610671d401bca8b7b6";
1580 sha1 = "06be7abef947a3f14a30fd610671d401bca8b7b6";
1544 };
1581 };
1545 };
1582 };
1546 "duplexer2-0.1.4" = {
1583 "duplexer2-0.1.4" = {
1547 name = "duplexer2";
1584 name = "duplexer2";
1548 packageName = "duplexer2";
1585 packageName = "duplexer2";
1549 version = "0.1.4";
1586 version = "0.1.4";
1550 src = fetchurl {
1587 src = fetchurl {
1551 url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz";
1588 url = "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz";
1552 sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1";
1589 sha1 = "8b12dab878c0d69e3e7891051662a32fc6bddcc1";
1553 };
1590 };
1554 };
1591 };
1555 "is-plain-obj-1.1.0" = {
1592 "is-plain-obj-1.1.0" = {
1556 name = "is-plain-obj";
1593 name = "is-plain-obj";
1557 packageName = "is-plain-obj";
1594 packageName = "is-plain-obj";
1558 version = "1.1.0";
1595 version = "1.1.0";
1559 src = fetchurl {
1596 src = fetchurl {
1560 url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
1597 url = "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz";
1561 sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
1598 sha1 = "71a50c8429dfca773c92a390a4a03b39fcd51d3e";
1562 };
1599 };
1563 };
1600 };
1564 "is-redirect-1.0.0" = {
1601 "is-redirect-1.0.0" = {
1565 name = "is-redirect";
1602 name = "is-redirect";
1566 packageName = "is-redirect";
1603 packageName = "is-redirect";
1567 version = "1.0.0";
1604 version = "1.0.0";
1568 src = fetchurl {
1605 src = fetchurl {
1569 url = "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz";
1606 url = "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz";
1570 sha1 = "1d03dded53bd8db0f30c26e4f95d36fc7c87dc24";
1607 sha1 = "1d03dded53bd8db0f30c26e4f95d36fc7c87dc24";
1571 };
1608 };
1572 };
1609 };
1573 "is-retry-allowed-1.1.0" = {
1610 "is-retry-allowed-1.1.0" = {
1574 name = "is-retry-allowed";
1611 name = "is-retry-allowed";
1575 packageName = "is-retry-allowed";
1612 packageName = "is-retry-allowed";
1576 version = "1.1.0";
1613 version = "1.1.0";
1577 src = fetchurl {
1614 src = fetchurl {
1578 url = "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz";
1615 url = "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz";
1579 sha1 = "11a060568b67339444033d0125a61a20d564fb34";
1616 sha1 = "11a060568b67339444033d0125a61a20d564fb34";
1580 };
1617 };
1581 };
1618 };
1582 "is-stream-1.1.0" = {
1619 "is-stream-1.1.0" = {
1583 name = "is-stream";
1620 name = "is-stream";
1584 packageName = "is-stream";
1621 packageName = "is-stream";
1585 version = "1.1.0";
1622 version = "1.1.0";
1586 src = fetchurl {
1623 src = fetchurl {
1587 url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
1624 url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
1588 sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
1625 sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
1589 };
1626 };
1590 };
1627 };
1591 "lowercase-keys-1.0.0" = {
1628 "lowercase-keys-1.0.0" = {
1592 name = "lowercase-keys";
1629 name = "lowercase-keys";
1593 packageName = "lowercase-keys";
1630 packageName = "lowercase-keys";
1594 version = "1.0.0";
1631 version = "1.0.0";
1595 src = fetchurl {
1632 src = fetchurl {
1596 url = "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz";
1633 url = "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz";
1597 sha1 = "4e3366b39e7f5457e35f1324bdf6f88d0bfc7306";
1634 sha1 = "4e3366b39e7f5457e35f1324bdf6f88d0bfc7306";
1598 };
1635 };
1599 };
1636 };
1600 "node-status-codes-1.0.0" = {
1637 "node-status-codes-1.0.0" = {
1601 name = "node-status-codes";
1638 name = "node-status-codes";
1602 packageName = "node-status-codes";
1639 packageName = "node-status-codes";
1603 version = "1.0.0";
1640 version = "1.0.0";
1604 src = fetchurl {
1641 src = fetchurl {
1605 url = "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz";
1642 url = "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz";
1606 sha1 = "5ae5541d024645d32a58fcddc9ceecea7ae3ac2f";
1643 sha1 = "5ae5541d024645d32a58fcddc9ceecea7ae3ac2f";
1607 };
1644 };
1608 };
1645 };
1609 "parse-json-2.2.0" = {
1646 "parse-json-2.2.0" = {
1610 name = "parse-json";
1647 name = "parse-json";
1611 packageName = "parse-json";
1648 packageName = "parse-json";
1612 version = "2.2.0";
1649 version = "2.2.0";
1613 src = fetchurl {
1650 src = fetchurl {
1614 url = "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz";
1651 url = "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz";
1615 sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
1652 sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
1616 };
1653 };
1617 };
1654 };
1618 "pinkie-promise-2.0.1" = {
1655 "pinkie-promise-2.0.1" = {
1619 name = "pinkie-promise";
1656 name = "pinkie-promise";
1620 packageName = "pinkie-promise";
1657 packageName = "pinkie-promise";
1621 version = "2.0.1";
1658 version = "2.0.1";
1622 src = fetchurl {
1659 src = fetchurl {
1623 url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
1660 url = "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz";
1624 sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
1661 sha1 = "2135d6dfa7a358c069ac9b178776288228450ffa";
1625 };
1662 };
1626 };
1663 };
1627 "read-all-stream-3.1.0" = {
1664 "read-all-stream-3.1.0" = {
1628 name = "read-all-stream";
1665 name = "read-all-stream";
1629 packageName = "read-all-stream";
1666 packageName = "read-all-stream";
1630 version = "3.1.0";
1667 version = "3.1.0";
1631 src = fetchurl {
1668 src = fetchurl {
1632 url = "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz";
1669 url = "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz";
1633 sha1 = "35c3e177f2078ef789ee4bfafa4373074eaef4fa";
1670 sha1 = "35c3e177f2078ef789ee4bfafa4373074eaef4fa";
1634 };
1671 };
1635 };
1672 };
1636 "readable-stream-2.1.5" = {
1673 "readable-stream-2.1.5" = {
1637 name = "readable-stream";
1674 name = "readable-stream";
1638 packageName = "readable-stream";
1675 packageName = "readable-stream";
1639 version = "2.1.5";
1676 version = "2.1.5";
1640 src = fetchurl {
1677 src = fetchurl {
1641 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz";
1678 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz";
1642 sha1 = "66fa8b720e1438b364681f2ad1a63c618448c9d0";
1679 sha1 = "66fa8b720e1438b364681f2ad1a63c618448c9d0";
1643 };
1680 };
1644 };
1681 };
1645 "timed-out-2.0.0" = {
1682 "timed-out-2.0.0" = {
1646 name = "timed-out";
1683 name = "timed-out";
1647 packageName = "timed-out";
1684 packageName = "timed-out";
1648 version = "2.0.0";
1685 version = "2.0.0";
1649 src = fetchurl {
1686 src = fetchurl {
1650 url = "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz";
1687 url = "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz";
1651 sha1 = "f38b0ae81d3747d628001f41dafc652ace671c0a";
1688 sha1 = "f38b0ae81d3747d628001f41dafc652ace671c0a";
1652 };
1689 };
1653 };
1690 };
1654 "unzip-response-1.0.0" = {
1691 "unzip-response-1.0.1" = {
1655 name = "unzip-response";
1692 name = "unzip-response";
1656 packageName = "unzip-response";
1693 packageName = "unzip-response";
1657 version = "1.0.0";
1694 version = "1.0.1";
1658 src = fetchurl {
1695 src = fetchurl {
1659 url = "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.0.tgz";
1696 url = "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.1.tgz";
1660 sha1 = "bfda54eeec658f00c2df4d4494b9dca0ca00f3e4";
1697 sha1 = "4a73959f2989470fa503791cefb54e1dbbc68412";
1661 };
1698 };
1662 };
1699 };
1663 "url-parse-lax-1.0.0" = {
1700 "url-parse-lax-1.0.0" = {
1664 name = "url-parse-lax";
1701 name = "url-parse-lax";
1665 packageName = "url-parse-lax";
1702 packageName = "url-parse-lax";
1666 version = "1.0.0";
1703 version = "1.0.0";
1667 src = fetchurl {
1704 src = fetchurl {
1668 url = "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz";
1705 url = "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz";
1669 sha1 = "7af8f303645e9bd79a272e7a14ac68bc0609da73";
1706 sha1 = "7af8f303645e9bd79a272e7a14ac68bc0609da73";
1670 };
1707 };
1671 };
1708 };
1672 "capture-stack-trace-1.0.0" = {
1709 "capture-stack-trace-1.0.0" = {
1673 name = "capture-stack-trace";
1710 name = "capture-stack-trace";
1674 packageName = "capture-stack-trace";
1711 packageName = "capture-stack-trace";
1675 version = "1.0.0";
1712 version = "1.0.0";
1676 src = fetchurl {
1713 src = fetchurl {
1677 url = "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz";
1714 url = "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz";
1678 sha1 = "4a6fa07399c26bba47f0b2496b4d0fb408c5550d";
1715 sha1 = "4a6fa07399c26bba47f0b2496b4d0fb408c5550d";
1679 };
1716 };
1680 };
1717 };
1681 "error-ex-1.3.0" = {
1718 "error-ex-1.3.0" = {
1682 name = "error-ex";
1719 name = "error-ex";
1683 packageName = "error-ex";
1720 packageName = "error-ex";
1684 version = "1.3.0";
1721 version = "1.3.0";
1685 src = fetchurl {
1722 src = fetchurl {
1686 url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz";
1723 url = "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz";
1687 sha1 = "e67b43f3e82c96ea3a584ffee0b9fc3325d802d9";
1724 sha1 = "e67b43f3e82c96ea3a584ffee0b9fc3325d802d9";
1688 };
1725 };
1689 };
1726 };
1690 "is-arrayish-0.2.1" = {
1727 "is-arrayish-0.2.1" = {
1691 name = "is-arrayish";
1728 name = "is-arrayish";
1692 packageName = "is-arrayish";
1729 packageName = "is-arrayish";
1693 version = "0.2.1";
1730 version = "0.2.1";
1694 src = fetchurl {
1731 src = fetchurl {
1695 url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
1732 url = "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz";
1696 sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
1733 sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
1697 };
1734 };
1698 };
1735 };
1699 "pinkie-2.0.4" = {
1736 "pinkie-2.0.4" = {
1700 name = "pinkie";
1737 name = "pinkie";
1701 packageName = "pinkie";
1738 packageName = "pinkie";
1702 version = "2.0.4";
1739 version = "2.0.4";
1703 src = fetchurl {
1740 src = fetchurl {
1704 url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
1741 url = "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz";
1705 sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
1742 sha1 = "72556b80cfa0d48a974e80e77248e80ed4f7f870";
1706 };
1743 };
1707 };
1744 };
1708 "buffer-shims-1.0.0" = {
1745 "buffer-shims-1.0.0" = {
1709 name = "buffer-shims";
1746 name = "buffer-shims";
1710 packageName = "buffer-shims";
1747 packageName = "buffer-shims";
1711 version = "1.0.0";
1748 version = "1.0.0";
1712 src = fetchurl {
1749 src = fetchurl {
1713 url = "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz";
1750 url = "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz";
1714 sha1 = "9978ce317388c649ad8793028c3477ef044a8b51";
1751 sha1 = "9978ce317388c649ad8793028c3477ef044a8b51";
1715 };
1752 };
1716 };
1753 };
1717 "core-util-is-1.0.2" = {
1754 "core-util-is-1.0.2" = {
1718 name = "core-util-is";
1755 name = "core-util-is";
1719 packageName = "core-util-is";
1756 packageName = "core-util-is";
1720 version = "1.0.2";
1757 version = "1.0.2";
1721 src = fetchurl {
1758 src = fetchurl {
1722 url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
1759 url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
1723 sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
1760 sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
1724 };
1761 };
1725 };
1762 };
1726 "isarray-1.0.0" = {
1763 "isarray-1.0.0" = {
1727 name = "isarray";
1764 name = "isarray";
1728 packageName = "isarray";
1765 packageName = "isarray";
1729 version = "1.0.0";
1766 version = "1.0.0";
1730 src = fetchurl {
1767 src = fetchurl {
1731 url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
1768 url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
1732 sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
1769 sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
1733 };
1770 };
1734 };
1771 };
1735 "process-nextick-args-1.0.7" = {
1772 "process-nextick-args-1.0.7" = {
1736 name = "process-nextick-args";
1773 name = "process-nextick-args";
1737 packageName = "process-nextick-args";
1774 packageName = "process-nextick-args";
1738 version = "1.0.7";
1775 version = "1.0.7";
1739 src = fetchurl {
1776 src = fetchurl {
1740 url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
1777 url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz";
1741 sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
1778 sha1 = "150e20b756590ad3f91093f25a4f2ad8bff30ba3";
1742 };
1779 };
1743 };
1780 };
1744 "string_decoder-0.10.31" = {
1781 "string_decoder-0.10.31" = {
1745 name = "string_decoder";
1782 name = "string_decoder";
1746 packageName = "string_decoder";
1783 packageName = "string_decoder";
1747 version = "0.10.31";
1784 version = "0.10.31";
1748 src = fetchurl {
1785 src = fetchurl {
1749 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
1786 url = "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";
1750 sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
1787 sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
1751 };
1788 };
1752 };
1789 };
1753 "util-deprecate-1.0.2" = {
1790 "util-deprecate-1.0.2" = {
1754 name = "util-deprecate";
1791 name = "util-deprecate";
1755 packageName = "util-deprecate";
1792 packageName = "util-deprecate";
1756 version = "1.0.2";
1793 version = "1.0.2";
1757 src = fetchurl {
1794 src = fetchurl {
1758 url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
1795 url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
1759 sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
1796 sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
1760 };
1797 };
1761 };
1798 };
1762 "prepend-http-1.0.4" = {
1799 "prepend-http-1.0.4" = {
1763 name = "prepend-http";
1800 name = "prepend-http";
1764 packageName = "prepend-http";
1801 packageName = "prepend-http";
1765 version = "1.0.4";
1802 version = "1.0.4";
1766 src = fetchurl {
1803 src = fetchurl {
1767 url = "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz";
1804 url = "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz";
1768 sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
1805 sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
1769 };
1806 };
1770 };
1807 };
1808 "rc-1.1.6" = {
1809 name = "rc";
1810 packageName = "rc";
1811 version = "1.1.6";
1812 src = fetchurl {
1813 url = "https://registry.npmjs.org/rc/-/rc-1.1.6.tgz";
1814 sha1 = "43651b76b6ae53b5c802f1151fa3fc3b059969c9";
1815 };
1816 };
1771 "ini-1.3.4" = {
1817 "ini-1.3.4" = {
1772 name = "ini";
1818 name = "ini";
1773 packageName = "ini";
1819 packageName = "ini";
1774 version = "1.3.4";
1820 version = "1.3.4";
1775 src = fetchurl {
1821 src = fetchurl {
1776 url = "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz";
1822 url = "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz";
1777 sha1 = "0537cb79daf59b59a1a517dff706c86ec039162e";
1823 sha1 = "0537cb79daf59b59a1a517dff706c86ec039162e";
1778 };
1824 };
1779 };
1825 };
1780 "minimist-1.2.0" = {
1826 "minimist-1.2.0" = {
1781 name = "minimist";
1827 name = "minimist";
1782 packageName = "minimist";
1828 packageName = "minimist";
1783 version = "1.2.0";
1829 version = "1.2.0";
1784 src = fetchurl {
1830 src = fetchurl {
1785 url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
1831 url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
1786 sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
1832 sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
1787 };
1833 };
1788 };
1834 };
1789 "strip-json-comments-1.0.4" = {
1835 "strip-json-comments-1.0.4" = {
1790 name = "strip-json-comments";
1836 name = "strip-json-comments";
1791 packageName = "strip-json-comments";
1837 packageName = "strip-json-comments";
1792 version = "1.0.4";
1838 version = "1.0.4";
1793 src = fetchurl {
1839 src = fetchurl {
1794 url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
1840 url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz";
1795 sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
1841 sha1 = "1e15fbcac97d3ee99bf2d73b4c656b082bbafb91";
1796 };
1842 };
1797 };
1843 };
1798 "crisper-1.2.0" = {
1844 "crisper-1.2.0" = {
1799 name = "crisper";
1845 name = "crisper";
1800 packageName = "crisper";
1846 packageName = "crisper";
1801 version = "1.2.0";
1847 version = "1.2.0";
1802 src = fetchurl {
1848 src = fetchurl {
1803 url = "https://registry.npmjs.org/crisper/-/crisper-1.2.0.tgz";
1849 url = "https://registry.npmjs.org/crisper/-/crisper-1.2.0.tgz";
1804 sha1 = "9a91f597d71f6110294e076ad44dbb3408568e46";
1850 sha1 = "9a91f597d71f6110294e076ad44dbb3408568e46";
1805 };
1851 };
1806 };
1852 };
1807 "cli-1.0.0" = {
1853 "cli-1.0.0" = {
1808 name = "cli";
1854 name = "cli";
1809 packageName = "cli";
1855 packageName = "cli";
1810 version = "1.0.0";
1856 version = "1.0.0";
1811 src = fetchurl {
1857 src = fetchurl {
1812 url = "https://registry.npmjs.org/cli/-/cli-1.0.0.tgz";
1858 url = "https://registry.npmjs.org/cli/-/cli-1.0.0.tgz";
1813 sha1 = "ee07dfc1390e3f2e6a9957cf88e1d4bfa777719d";
1859 sha1 = "ee07dfc1390e3f2e6a9957cf88e1d4bfa777719d";
1814 };
1860 };
1815 };
1861 };
1816 "console-browserify-1.1.0" = {
1862 "console-browserify-1.1.0" = {
1817 name = "console-browserify";
1863 name = "console-browserify";
1818 packageName = "console-browserify";
1864 packageName = "console-browserify";
1819 version = "1.1.0";
1865 version = "1.1.0";
1820 src = fetchurl {
1866 src = fetchurl {
1821 url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
1867 url = "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz";
1822 sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
1868 sha1 = "f0241c45730a9fc6323b206dbf38edc741d0bb10";
1823 };
1869 };
1824 };
1870 };
1825 "htmlparser2-3.8.3" = {
1871 "htmlparser2-3.8.3" = {
1826 name = "htmlparser2";
1872 name = "htmlparser2";
1827 packageName = "htmlparser2";
1873 packageName = "htmlparser2";
1828 version = "3.8.3";
1874 version = "3.8.3";
1829 src = fetchurl {
1875 src = fetchurl {
1830 url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
1876 url = "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";
1831 sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
1877 sha1 = "996c28b191516a8be86501a7d79757e5c70c1068";
1832 };
1878 };
1833 };
1879 };
1834 "minimatch-3.0.3" = {
1880 "minimatch-3.0.3" = {
1835 name = "minimatch";
1881 name = "minimatch";
1836 packageName = "minimatch";
1882 packageName = "minimatch";
1837 version = "3.0.3";
1883 version = "3.0.3";
1838 src = fetchurl {
1884 src = fetchurl {
1839 url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz";
1885 url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz";
1840 sha1 = "2a4e4090b96b2db06a9d7df01055a62a77c9b774";
1886 sha1 = "2a4e4090b96b2db06a9d7df01055a62a77c9b774";
1841 };
1887 };
1842 };
1888 };
1843 "shelljs-0.3.0" = {
1889 "shelljs-0.3.0" = {
1844 name = "shelljs";
1890 name = "shelljs";
1845 packageName = "shelljs";
1891 packageName = "shelljs";
1846 version = "0.3.0";
1892 version = "0.3.0";
1847 src = fetchurl {
1893 src = fetchurl {
1848 url = "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
1894 url = "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz";
1849 sha1 = "3596e6307a781544f591f37da618360f31db57b1";
1895 sha1 = "3596e6307a781544f591f37da618360f31db57b1";
1850 };
1896 };
1851 };
1897 };
1852 "lodash-3.7.0" = {
1898 "lodash-3.7.0" = {
1853 name = "lodash";
1899 name = "lodash";
1854 packageName = "lodash";
1900 packageName = "lodash";
1855 version = "3.7.0";
1901 version = "3.7.0";
1856 src = fetchurl {
1902 src = fetchurl {
1857 url = "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz";
1903 url = "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz";
1858 sha1 = "3678bd8ab995057c07ade836ed2ef087da811d45";
1904 sha1 = "3678bd8ab995057c07ade836ed2ef087da811d45";
1859 };
1905 };
1860 };
1906 };
1861 "glob-7.0.6" = {
1907 "glob-7.1.0" = {
1862 name = "glob";
1908 name = "glob";
1863 packageName = "glob";
1909 packageName = "glob";
1864 version = "7.0.6";
1910 version = "7.1.0";
1865 src = fetchurl {
1911 src = fetchurl {
1866 url = "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz";
1912 url = "https://registry.npmjs.org/glob/-/glob-7.1.0.tgz";
1867 sha1 = "211bafaf49e525b8cd93260d14ab136152b3f57a";
1913 sha1 = "36add856d746d0d99e4cc2797bba1ae2c67272fd";
1868 };
1914 };
1869 };
1915 };
1870 "fs.realpath-1.0.0" = {
1916 "fs.realpath-1.0.0" = {
1871 name = "fs.realpath";
1917 name = "fs.realpath";
1872 packageName = "fs.realpath";
1918 packageName = "fs.realpath";
1873 version = "1.0.0";
1919 version = "1.0.0";
1874 src = fetchurl {
1920 src = fetchurl {
1875 url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
1921 url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
1876 sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
1922 sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
1877 };
1923 };
1878 };
1924 };
1879 "inflight-1.0.5" = {
1925 "inflight-1.0.5" = {
1880 name = "inflight";
1926 name = "inflight";
1881 packageName = "inflight";
1927 packageName = "inflight";
1882 version = "1.0.5";
1928 version = "1.0.5";
1883 src = fetchurl {
1929 src = fetchurl {
1884 url = "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz";
1930 url = "https://registry.npmjs.org/inflight/-/inflight-1.0.5.tgz";
1885 sha1 = "db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a";
1931 sha1 = "db3204cd5a9de2e6cd890b85c6e2f66bcf4f620a";
1886 };
1932 };
1887 };
1933 };
1888 "once-1.3.3" = {
1934 "once-1.4.0" = {
1889 name = "once";
1935 name = "once";
1890 packageName = "once";
1936 packageName = "once";
1891 version = "1.3.3";
1937 version = "1.4.0";
1892 src = fetchurl {
1938 src = fetchurl {
1893 url = "https://registry.npmjs.org/once/-/once-1.3.3.tgz";
1939 url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
1894 sha1 = "b2e261557ce4c314ec8304f3fa82663e4297ca20";
1940 sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
1895 };
1941 };
1896 };
1942 };
1897 "wrappy-1.0.2" = {
1943 "wrappy-1.0.2" = {
1898 name = "wrappy";
1944 name = "wrappy";
1899 packageName = "wrappy";
1945 packageName = "wrappy";
1900 version = "1.0.2";
1946 version = "1.0.2";
1901 src = fetchurl {
1947 src = fetchurl {
1902 url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
1948 url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
1903 sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
1949 sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
1904 };
1950 };
1905 };
1951 };
1906 "brace-expansion-1.1.6" = {
1952 "brace-expansion-1.1.6" = {
1907 name = "brace-expansion";
1953 name = "brace-expansion";
1908 packageName = "brace-expansion";
1954 packageName = "brace-expansion";
1909 version = "1.1.6";
1955 version = "1.1.6";
1910 src = fetchurl {
1956 src = fetchurl {
1911 url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz";
1957 url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz";
1912 sha1 = "7197d7eaa9b87e648390ea61fc66c84427420df9";
1958 sha1 = "7197d7eaa9b87e648390ea61fc66c84427420df9";
1913 };
1959 };
1914 };
1960 };
1915 "balanced-match-0.4.2" = {
1961 "balanced-match-0.4.2" = {
1916 name = "balanced-match";
1962 name = "balanced-match";
1917 packageName = "balanced-match";
1963 packageName = "balanced-match";
1918 version = "0.4.2";
1964 version = "0.4.2";
1919 src = fetchurl {
1965 src = fetchurl {
1920 url = "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz";
1966 url = "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz";
1921 sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838";
1967 sha1 = "cb3f3e3c732dc0f01ee70b403f302e61d7709838";
1922 };
1968 };
1923 };
1969 };
1924 "concat-map-0.0.1" = {
1970 "concat-map-0.0.1" = {
1925 name = "concat-map";
1971 name = "concat-map";
1926 packageName = "concat-map";
1972 packageName = "concat-map";
1927 version = "0.0.1";
1973 version = "0.0.1";
1928 src = fetchurl {
1974 src = fetchurl {
1929 url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
1975 url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
1930 sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
1976 sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
1931 };
1977 };
1932 };
1978 };
1933 "date-now-0.1.4" = {
1979 "date-now-0.1.4" = {
1934 name = "date-now";
1980 name = "date-now";
1935 packageName = "date-now";
1981 packageName = "date-now";
1936 version = "0.1.4";
1982 version = "0.1.4";
1937 src = fetchurl {
1983 src = fetchurl {
1938 url = "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
1984 url = "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz";
1939 sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
1985 sha1 = "eaf439fd4d4848ad74e5cc7dbef200672b9e345b";
1940 };
1986 };
1941 };
1987 };
1942 "domhandler-2.3.0" = {
1988 "domhandler-2.3.0" = {
1943 name = "domhandler";
1989 name = "domhandler";
1944 packageName = "domhandler";
1990 packageName = "domhandler";
1945 version = "2.3.0";
1991 version = "2.3.0";
1946 src = fetchurl {
1992 src = fetchurl {
1947 url = "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
1993 url = "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";
1948 sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
1994 sha1 = "2de59a0822d5027fabff6f032c2b25a2a8abe738";
1949 };
1995 };
1950 };
1996 };
1951 "domutils-1.5.1" = {
1997 "domutils-1.5.1" = {
1952 name = "domutils";
1998 name = "domutils";
1953 packageName = "domutils";
1999 packageName = "domutils";
1954 version = "1.5.1";
2000 version = "1.5.1";
1955 src = fetchurl {
2001 src = fetchurl {
1956 url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
2002 url = "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz";
1957 sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
2003 sha1 = "dcd8488a26f563d61079e48c9f7b7e32373682cf";
1958 };
2004 };
1959 };
2005 };
1960 "domelementtype-1.3.0" = {
2006 "domelementtype-1.3.0" = {
1961 name = "domelementtype";
2007 name = "domelementtype";
1962 packageName = "domelementtype";
2008 packageName = "domelementtype";
1963 version = "1.3.0";
2009 version = "1.3.0";
1964 src = fetchurl {
2010 src = fetchurl {
1965 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz";
2011 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz";
1966 sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
2012 sha1 = "b17aed82e8ab59e52dd9c19b1756e0fc187204c2";
1967 };
2013 };
1968 };
2014 };
1969 "readable-stream-1.1.14" = {
2015 "readable-stream-1.1.14" = {
1970 name = "readable-stream";
2016 name = "readable-stream";
1971 packageName = "readable-stream";
2017 packageName = "readable-stream";
1972 version = "1.1.14";
2018 version = "1.1.14";
1973 src = fetchurl {
2019 src = fetchurl {
1974 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
2020 url = "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";
1975 sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
2021 sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
1976 };
2022 };
1977 };
2023 };
1978 "entities-1.0.0" = {
2024 "entities-1.0.0" = {
1979 name = "entities";
2025 name = "entities";
1980 packageName = "entities";
2026 packageName = "entities";
1981 version = "1.0.0";
2027 version = "1.0.0";
1982 src = fetchurl {
2028 src = fetchurl {
1983 url = "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
2029 url = "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz";
1984 sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
2030 sha1 = "b2987aa3821347fcde642b24fdfc9e4fb712bf26";
1985 };
2031 };
1986 };
2032 };
1987 "dom-serializer-0.1.0" = {
2033 "dom-serializer-0.1.0" = {
1988 name = "dom-serializer";
2034 name = "dom-serializer";
1989 packageName = "dom-serializer";
2035 packageName = "dom-serializer";
1990 version = "0.1.0";
2036 version = "0.1.0";
1991 src = fetchurl {
2037 src = fetchurl {
1992 url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz";
2038 url = "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz";
1993 sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
2039 sha1 = "073c697546ce0780ce23be4a28e293e40bc30c82";
1994 };
2040 };
1995 };
2041 };
1996 "domelementtype-1.1.3" = {
2042 "domelementtype-1.1.3" = {
1997 name = "domelementtype";
2043 name = "domelementtype";
1998 packageName = "domelementtype";
2044 packageName = "domelementtype";
1999 version = "1.1.3";
2045 version = "1.1.3";
2000 src = fetchurl {
2046 src = fetchurl {
2001 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz";
2047 url = "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz";
2002 sha1 = "bd28773e2642881aec51544924299c5cd822185b";
2048 sha1 = "bd28773e2642881aec51544924299c5cd822185b";
2003 };
2049 };
2004 };
2050 };
2005 "entities-1.1.1" = {
2051 "entities-1.1.1" = {
2006 name = "entities";
2052 name = "entities";
2007 packageName = "entities";
2053 packageName = "entities";
2008 version = "1.1.1";
2054 version = "1.1.1";
2009 src = fetchurl {
2055 src = fetchurl {
2010 url = "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz";
2056 url = "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz";
2011 sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0";
2057 sha1 = "6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0";
2012 };
2058 };
2013 };
2059 };
2014 };
2060 };
2015 args = {
2061 args = {
2016 name = "rhodecode-enterprise";
2062 name = "rhodecode-enterprise";
2017 packageName = "rhodecode-enterprise";
2063 packageName = "rhodecode-enterprise";
2018 version = "0.0.1";
2064 version = "0.0.1";
2019 src = ./.;
2065 src = ./.;
2020 dependencies = [
2066 dependencies = [
2021 sources."grunt-0.4.5"
2067 sources."grunt-0.4.5"
2022 sources."grunt-contrib-copy-1.0.0"
2068 sources."grunt-contrib-copy-1.0.0"
2023 (sources."grunt-contrib-concat-0.5.1" // {
2069 (sources."grunt-contrib-concat-0.5.1" // {
2024 dependencies = [
2070 dependencies = [
2025 sources."chalk-0.5.1"
2071 sources."chalk-0.5.1"
2026 sources."ansi-styles-1.1.0"
2072 sources."ansi-styles-1.1.0"
2027 sources."has-ansi-0.1.0"
2073 sources."has-ansi-0.1.0"
2028 sources."strip-ansi-0.3.0"
2074 sources."strip-ansi-0.3.0"
2029 sources."supports-color-0.2.0"
2075 sources."supports-color-0.2.0"
2030 sources."ansi-regex-0.2.1"
2076 sources."ansi-regex-0.2.1"
2031 ];
2077 ];
2032 })
2078 })
2033 sources."grunt-contrib-jshint-0.12.0"
2079 sources."grunt-contrib-jshint-0.12.0"
2034 (sources."grunt-contrib-less-1.4.0" // {
2080 (sources."grunt-contrib-less-1.4.0" // {
2035 dependencies = [
2081 dependencies = [
2036 sources."async-2.0.1"
2082 sources."async-2.0.1"
2037 sources."lodash-4.15.0"
2083 sources."lodash-4.16.2"
2038 ];
2084 ];
2039 })
2085 })
2040 (sources."grunt-contrib-watch-0.6.1" // {
2086 (sources."grunt-contrib-watch-0.6.1" // {
2041 dependencies = [
2087 dependencies = [
2042 sources."lodash-2.4.2"
2088 sources."lodash-2.4.2"
2043 sources."async-0.2.10"
2089 sources."async-0.2.10"
2044 ];
2090 ];
2045 })
2091 })
2046 sources."crisper-2.0.2"
2092 sources."crisper-2.0.2"
2047 (sources."vulcanize-1.14.8" // {
2093 (sources."vulcanize-1.14.8" // {
2048 dependencies = [
2094 dependencies = [
2049 sources."nopt-3.0.6"
2095 sources."nopt-3.0.6"
2050 ];
2096 ];
2051 })
2097 })
2052 sources."grunt-crisper-1.0.1"
2098 sources."grunt-crisper-1.0.1"
2053 (sources."grunt-vulcanize-1.0.0" // {
2099 (sources."grunt-vulcanize-1.0.0" // {
2054 dependencies = [
2100 dependencies = [
2055 sources."crisper-1.2.0"
2101 sources."crisper-1.2.0"
2056 sources."nopt-3.0.6"
2102 sources."nopt-3.0.6"
2057 ];
2103 ];
2058 })
2104 })
2059 (sources."jshint-2.9.3" // {
2105 (sources."jshint-2.9.3" // {
2060 dependencies = [
2106 dependencies = [
2061 sources."minimatch-3.0.3"
2107 sources."minimatch-3.0.3"
2062 sources."lodash-3.7.0"
2108 sources."lodash-3.7.0"
2063 ];
2109 ];
2064 })
2110 })
2111 sources."bower-1.7.9"
2112 sources."favico.js-0.3.10"
2113 sources."appenlight-client-git+https://git@github.com/AppEnlight/appenlight-client-js.git#0.5.0"
2065 sources."async-0.1.22"
2114 sources."async-0.1.22"
2066 sources."coffee-script-1.3.3"
2115 sources."coffee-script-1.3.3"
2067 sources."colors-0.6.2"
2116 sources."colors-0.6.2"
2068 sources."dateformat-1.0.2-1.2.3"
2117 sources."dateformat-1.0.2-1.2.3"
2069 sources."eventemitter2-0.4.14"
2118 sources."eventemitter2-0.4.14"
2070 (sources."findup-sync-0.1.3" // {
2119 (sources."findup-sync-0.1.3" // {
2071 dependencies = [
2120 dependencies = [
2072 sources."glob-3.2.11"
2121 sources."glob-3.2.11"
2073 sources."lodash-2.4.2"
2122 sources."lodash-2.4.2"
2074 sources."minimatch-0.3.0"
2123 sources."minimatch-0.3.0"
2075 ];
2124 ];
2076 })
2125 })
2077 (sources."glob-3.1.21" // {
2126 (sources."glob-3.1.21" // {
2078 dependencies = [
2127 dependencies = [
2079 sources."inherits-1.0.2"
2128 sources."inherits-1.0.2"
2080 ];
2129 ];
2081 })
2130 })
2082 sources."hooker-0.2.3"
2131 sources."hooker-0.2.3"
2083 sources."iconv-lite-0.2.11"
2132 sources."iconv-lite-0.2.11"
2084 sources."minimatch-0.2.14"
2133 sources."minimatch-0.2.14"
2085 sources."nopt-1.0.10"
2134 sources."nopt-1.0.10"
2086 sources."rimraf-2.2.8"
2135 sources."rimraf-2.2.8"
2087 sources."lodash-0.9.2"
2136 sources."lodash-0.9.2"
2088 sources."underscore.string-2.2.1"
2137 sources."underscore.string-2.2.1"
2089 sources."which-1.0.9"
2138 sources."which-1.0.9"
2090 sources."js-yaml-2.0.5"
2139 sources."js-yaml-2.0.5"
2091 sources."exit-0.1.2"
2140 sources."exit-0.1.2"
2092 sources."getobject-0.1.0"
2141 sources."getobject-0.1.0"
2093 sources."grunt-legacy-util-0.2.0"
2142 sources."grunt-legacy-util-0.2.0"
2094 (sources."grunt-legacy-log-0.1.3" // {
2143 (sources."grunt-legacy-log-0.1.3" // {
2095 dependencies = [
2144 dependencies = [
2096 sources."lodash-2.4.2"
2145 sources."lodash-2.4.2"
2097 sources."underscore.string-2.3.3"
2146 sources."underscore.string-2.3.3"
2098 ];
2147 ];
2099 })
2148 })
2100 sources."inherits-2.0.1"
2149 sources."inherits-2.0.3"
2101 sources."lru-cache-2.7.3"
2150 sources."lru-cache-2.7.3"
2102 sources."sigmund-1.0.1"
2151 sources."sigmund-1.0.1"
2103 sources."graceful-fs-1.2.3"
2152 sources."graceful-fs-1.2.3"
2104 sources."abbrev-1.0.9"
2153 sources."abbrev-1.0.9"
2105 (sources."argparse-0.1.16" // {
2154 (sources."argparse-0.1.16" // {
2106 dependencies = [
2155 dependencies = [
2107 sources."underscore.string-2.4.0"
2156 sources."underscore.string-2.4.0"
2108 ];
2157 ];
2109 })
2158 })
2110 sources."esprima-1.0.4"
2159 sources."esprima-1.0.4"
2111 sources."underscore-1.7.0"
2160 sources."underscore-1.7.0"
2112 (sources."grunt-legacy-log-utils-0.1.1" // {
2161 (sources."grunt-legacy-log-utils-0.1.1" // {
2113 dependencies = [
2162 dependencies = [
2114 sources."lodash-2.4.2"
2163 sources."lodash-2.4.2"
2115 sources."underscore.string-2.3.3"
2164 sources."underscore.string-2.3.3"
2116 ];
2165 ];
2117 })
2166 })
2118 sources."chalk-1.1.3"
2167 sources."chalk-1.1.3"
2119 sources."file-sync-cmp-0.1.1"
2168 sources."file-sync-cmp-0.1.1"
2120 sources."ansi-styles-2.2.1"
2169 sources."ansi-styles-2.2.1"
2121 sources."escape-string-regexp-1.0.5"
2170 sources."escape-string-regexp-1.0.5"
2122 sources."has-ansi-2.0.0"
2171 sources."has-ansi-2.0.0"
2123 sources."strip-ansi-3.0.1"
2172 sources."strip-ansi-3.0.1"
2124 sources."supports-color-2.0.0"
2173 sources."supports-color-2.0.0"
2125 sources."ansi-regex-2.0.0"
2174 sources."ansi-regex-2.0.0"
2126 sources."source-map-0.3.0"
2175 sources."source-map-0.3.0"
2127 sources."amdefine-1.0.0"
2176 sources."amdefine-1.0.0"
2128 (sources."less-2.7.1" // {
2177 (sources."less-2.7.1" // {
2129 dependencies = [
2178 dependencies = [
2130 sources."graceful-fs-4.1.6"
2179 sources."graceful-fs-4.1.8"
2131 sources."source-map-0.5.6"
2180 sources."source-map-0.5.6"
2132 ];
2181 ];
2133 })
2182 })
2134 sources."errno-0.1.4"
2183 sources."errno-0.1.4"
2135 sources."image-size-0.5.0"
2184 sources."image-size-0.5.0"
2136 sources."mime-1.3.4"
2185 sources."mime-1.3.4"
2137 sources."mkdirp-0.5.1"
2186 sources."mkdirp-0.5.1"
2138 sources."promise-7.1.1"
2187 sources."promise-7.1.1"
2139 sources."prr-0.0.0"
2188 sources."prr-0.0.0"
2140 sources."minimist-0.0.8"
2189 sources."minimist-0.0.8"
2141 sources."asap-2.0.4"
2190 sources."asap-2.0.5"
2142 sources."gaze-0.5.2"
2191 sources."gaze-0.5.2"
2143 sources."tiny-lr-fork-0.0.5"
2192 sources."tiny-lr-fork-0.0.5"
2144 (sources."globule-0.1.0" // {
2193 (sources."globule-0.1.0" // {
2145 dependencies = [
2194 dependencies = [
2146 sources."lodash-1.0.2"
2195 sources."lodash-1.0.2"
2147 ];
2196 ];
2148 })
2197 })
2149 sources."qs-0.5.6"
2198 sources."qs-0.5.6"
2150 sources."faye-websocket-0.4.4"
2199 sources."faye-websocket-0.4.4"
2151 (sources."noptify-0.0.3" // {
2200 (sources."noptify-0.0.3" // {
2152 dependencies = [
2201 dependencies = [
2153 sources."nopt-2.0.0"
2202 sources."nopt-2.0.0"
2154 ];
2203 ];
2155 })
2204 })
2156 sources."debug-0.7.4"
2205 sources."debug-0.7.4"
2157 sources."command-line-args-2.1.6"
2206 sources."command-line-args-2.1.6"
2158 sources."dom5-1.3.3"
2207 sources."dom5-1.3.6"
2159 sources."array-back-1.0.3"
2208 sources."array-back-1.0.3"
2160 sources."command-line-usage-2.0.5"
2209 sources."command-line-usage-2.0.5"
2161 sources."core-js-2.4.1"
2210 sources."core-js-2.4.1"
2162 sources."feature-detect-es6-1.3.1"
2211 sources."feature-detect-es6-1.3.1"
2163 (sources."find-replace-1.0.2" // {
2212 (sources."find-replace-1.0.2" // {
2164 dependencies = [
2213 dependencies = [
2165 sources."test-value-2.0.0"
2214 sources."test-value-2.1.0"
2166 ];
2215 ];
2167 })
2216 })
2168 sources."typical-2.5.0"
2217 sources."typical-2.6.0"
2169 sources."ansi-escape-sequences-2.2.2"
2218 sources."ansi-escape-sequences-2.2.2"
2170 sources."column-layout-2.1.4"
2219 sources."column-layout-2.1.4"
2171 sources."wordwrapjs-1.2.1"
2220 sources."wordwrapjs-1.2.1"
2172 sources."collect-all-0.2.1"
2221 sources."collect-all-0.2.1"
2173 sources."stream-connect-1.0.2"
2222 sources."stream-connect-1.0.2"
2174 sources."stream-via-0.1.1"
2223 sources."stream-via-0.1.1"
2175 (sources."collect-json-1.0.8" // {
2224 (sources."collect-json-1.0.8" // {
2176 dependencies = [
2225 dependencies = [
2177 sources."collect-all-1.0.2"
2226 sources."collect-all-1.0.2"
2178 sources."stream-via-1.0.3"
2227 sources."stream-via-1.0.3"
2179 ];
2228 ];
2180 })
2229 })
2181 sources."deep-extend-0.4.1"
2230 sources."deep-extend-0.4.1"
2182 sources."object-tools-2.0.6"
2231 sources."object-tools-2.0.6"
2183 sources."object-get-2.1.0"
2232 sources."object-get-2.1.0"
2184 sources."test-value-1.1.0"
2233 sources."test-value-1.1.0"
2185 sources."@types/clone-0.1.29"
2234 sources."@types/clone-0.1.30"
2186 sources."@types/node-4.0.30"
2235 sources."@types/node-4.0.30"
2187 (sources."@types/parse5-0.0.28" // {
2236 (sources."@types/parse5-0.0.31" // {
2188 dependencies = [
2237 dependencies = [
2189 sources."@types/node-6.0.37"
2238 sources."@types/node-6.0.41"
2190 ];
2239 ];
2191 })
2240 })
2192 sources."clone-1.0.2"
2241 sources."clone-1.0.2"
2193 sources."parse5-1.5.1"
2242 sources."parse5-1.5.1"
2194 sources."es6-promise-2.3.0"
2243 sources."es6-promise-2.3.0"
2195 sources."hydrolysis-1.24.1"
2244 sources."hydrolysis-1.24.1"
2196 sources."path-posix-1.0.0"
2245 sources."path-posix-1.0.0"
2197 sources."update-notifier-0.6.3"
2246 sources."update-notifier-0.6.3"
2198 sources."babel-polyfill-6.13.0"
2247 sources."babel-polyfill-6.13.0"
2199 sources."doctrine-0.7.2"
2248 sources."doctrine-0.7.2"
2200 (sources."escodegen-1.8.1" // {
2249 (sources."escodegen-1.8.1" // {
2201 dependencies = [
2250 dependencies = [
2202 sources."estraverse-1.9.3"
2251 sources."estraverse-1.9.3"
2203 sources."esutils-2.0.2"
2252 sources."esutils-2.0.2"
2204 sources."esprima-2.7.3"
2253 sources."esprima-2.7.3"
2205 sources."source-map-0.2.0"
2254 sources."source-map-0.2.0"
2206 ];
2255 ];
2207 })
2256 })
2208 sources."espree-3.1.7"
2257 sources."espree-3.3.1"
2209 sources."estraverse-3.1.0"
2258 sources."estraverse-3.1.0"
2210 sources."path-is-absolute-1.0.0"
2259 sources."path-is-absolute-1.0.0"
2211 sources."babel-runtime-6.11.6"
2260 sources."babel-runtime-6.11.6"
2212 sources."regenerator-runtime-0.9.5"
2261 sources."regenerator-runtime-0.9.5"
2213 sources."esutils-1.1.6"
2262 sources."esutils-1.1.6"
2214 sources."isarray-0.0.1"
2263 sources."isarray-0.0.1"
2215 sources."optionator-0.8.1"
2264 sources."optionator-0.8.2"
2216 sources."prelude-ls-1.1.2"
2265 sources."prelude-ls-1.1.2"
2217 sources."deep-is-0.1.3"
2266 sources."deep-is-0.1.3"
2218 sources."wordwrap-1.0.0"
2267 sources."wordwrap-1.0.0"
2219 sources."type-check-0.3.2"
2268 sources."type-check-0.3.2"
2220 sources."levn-0.3.0"
2269 sources."levn-0.3.0"
2221 sources."fast-levenshtein-1.1.4"
2270 sources."fast-levenshtein-2.0.4"
2222 sources."acorn-3.3.0"
2271 sources."acorn-4.0.3"
2223 sources."acorn-jsx-3.0.1"
2272 (sources."acorn-jsx-3.0.1" // {
2273 dependencies = [
2274 sources."acorn-3.3.0"
2275 ];
2276 })
2224 sources."boxen-0.3.1"
2277 sources."boxen-0.3.1"
2225 (sources."configstore-2.0.0" // {
2278 (sources."configstore-2.1.0" // {
2226 dependencies = [
2279 dependencies = [
2227 sources."graceful-fs-4.1.6"
2280 sources."graceful-fs-4.1.8"
2228 ];
2281 ];
2229 })
2282 })
2230 sources."is-npm-1.0.0"
2283 sources."is-npm-1.0.0"
2231 sources."latest-version-2.0.0"
2284 sources."latest-version-2.0.0"
2232 sources."semver-diff-2.1.0"
2285 sources."semver-diff-2.1.0"
2233 sources."filled-array-1.1.0"
2286 sources."filled-array-1.1.0"
2234 sources."object-assign-4.1.0"
2287 sources."object-assign-4.1.0"
2235 sources."repeating-2.0.1"
2288 sources."repeating-2.0.1"
2236 sources."string-width-1.0.2"
2289 sources."string-width-1.0.2"
2237 sources."widest-line-1.0.0"
2290 sources."widest-line-1.0.0"
2238 sources."is-finite-1.0.1"
2291 sources."is-finite-1.0.1"
2239 sources."number-is-nan-1.0.0"
2292 sources."number-is-nan-1.0.0"
2240 sources."code-point-at-1.0.0"
2293 sources."code-point-at-1.0.0"
2241 sources."is-fullwidth-code-point-1.0.0"
2294 sources."is-fullwidth-code-point-1.0.0"
2242 sources."dot-prop-2.4.0"
2295 sources."dot-prop-3.0.0"
2243 sources."os-tmpdir-1.0.1"
2296 sources."os-tmpdir-1.0.1"
2244 sources."osenv-0.1.3"
2297 sources."osenv-0.1.3"
2245 sources."uuid-2.0.2"
2298 sources."uuid-2.0.3"
2246 (sources."write-file-atomic-1.2.0" // {
2299 (sources."write-file-atomic-1.2.0" // {
2247 dependencies = [
2300 dependencies = [
2248 sources."graceful-fs-4.1.6"
2301 sources."graceful-fs-4.1.8"
2249 ];
2302 ];
2250 })
2303 })
2251 sources."xdg-basedir-2.0.0"
2304 sources."xdg-basedir-2.0.0"
2252 sources."is-obj-1.0.1"
2305 sources."is-obj-1.0.1"
2253 sources."os-homedir-1.0.1"
2306 sources."os-homedir-1.0.1"
2254 sources."imurmurhash-0.1.4"
2307 sources."imurmurhash-0.1.4"
2255 sources."slide-1.1.6"
2308 sources."slide-1.1.6"
2256 sources."package-json-2.3.3"
2309 sources."package-json-2.4.0"
2257 sources."got-5.6.0"
2310 sources."got-5.6.0"
2258 (sources."rc-1.1.6" // {
2311 sources."registry-auth-token-3.0.1"
2259 dependencies = [
2260 sources."minimist-1.2.0"
2261 ];
2262 })
2263 sources."registry-url-3.1.0"
2312 sources."registry-url-3.1.0"
2264 sources."semver-5.3.0"
2313 sources."semver-5.3.0"
2265 sources."create-error-class-3.0.2"
2314 sources."create-error-class-3.0.2"
2266 sources."duplexer2-0.1.4"
2315 sources."duplexer2-0.1.4"
2267 sources."is-plain-obj-1.1.0"
2316 sources."is-plain-obj-1.1.0"
2268 sources."is-redirect-1.0.0"
2317 sources."is-redirect-1.0.0"
2269 sources."is-retry-allowed-1.1.0"
2318 sources."is-retry-allowed-1.1.0"
2270 sources."is-stream-1.1.0"
2319 sources."is-stream-1.1.0"
2271 sources."lowercase-keys-1.0.0"
2320 sources."lowercase-keys-1.0.0"
2272 sources."node-status-codes-1.0.0"
2321 sources."node-status-codes-1.0.0"
2273 sources."parse-json-2.2.0"
2322 sources."parse-json-2.2.0"
2274 sources."pinkie-promise-2.0.1"
2323 sources."pinkie-promise-2.0.1"
2275 sources."read-all-stream-3.1.0"
2324 sources."read-all-stream-3.1.0"
2276 (sources."readable-stream-2.1.5" // {
2325 (sources."readable-stream-2.1.5" // {
2277 dependencies = [
2326 dependencies = [
2278 sources."isarray-1.0.0"
2327 sources."isarray-1.0.0"
2279 ];
2328 ];
2280 })
2329 })
2281 sources."timed-out-2.0.0"
2330 sources."timed-out-2.0.0"
2282 sources."unzip-response-1.0.0"
2331 sources."unzip-response-1.0.1"
2283 sources."url-parse-lax-1.0.0"
2332 sources."url-parse-lax-1.0.0"
2284 sources."capture-stack-trace-1.0.0"
2333 sources."capture-stack-trace-1.0.0"
2285 sources."error-ex-1.3.0"
2334 sources."error-ex-1.3.0"
2286 sources."is-arrayish-0.2.1"
2335 sources."is-arrayish-0.2.1"
2287 sources."pinkie-2.0.4"
2336 sources."pinkie-2.0.4"
2288 sources."buffer-shims-1.0.0"
2337 sources."buffer-shims-1.0.0"
2289 sources."core-util-is-1.0.2"
2338 sources."core-util-is-1.0.2"
2290 sources."process-nextick-args-1.0.7"
2339 sources."process-nextick-args-1.0.7"
2291 sources."string_decoder-0.10.31"
2340 sources."string_decoder-0.10.31"
2292 sources."util-deprecate-1.0.2"
2341 sources."util-deprecate-1.0.2"
2293 sources."prepend-http-1.0.4"
2342 sources."prepend-http-1.0.4"
2343 (sources."rc-1.1.6" // {
2344 dependencies = [
2345 sources."minimist-1.2.0"
2346 ];
2347 })
2294 sources."ini-1.3.4"
2348 sources."ini-1.3.4"
2295 sources."strip-json-comments-1.0.4"
2349 sources."strip-json-comments-1.0.4"
2296 (sources."cli-1.0.0" // {
2350 (sources."cli-1.0.0" // {
2297 dependencies = [
2351 dependencies = [
2298 sources."glob-7.0.6"
2352 sources."glob-7.1.0"
2299 sources."minimatch-3.0.3"
2353 sources."minimatch-3.0.3"
2300 ];
2354 ];
2301 })
2355 })
2302 sources."console-browserify-1.1.0"
2356 sources."console-browserify-1.1.0"
2303 (sources."htmlparser2-3.8.3" // {
2357 (sources."htmlparser2-3.8.3" // {
2304 dependencies = [
2358 dependencies = [
2305 sources."readable-stream-1.1.14"
2359 sources."readable-stream-1.1.14"
2306 ];
2360 ];
2307 })
2361 })
2308 sources."shelljs-0.3.0"
2362 sources."shelljs-0.3.0"
2309 sources."fs.realpath-1.0.0"
2363 sources."fs.realpath-1.0.0"
2310 sources."inflight-1.0.5"
2364 sources."inflight-1.0.5"
2311 sources."once-1.3.3"
2365 sources."once-1.4.0"
2312 sources."wrappy-1.0.2"
2366 sources."wrappy-1.0.2"
2313 sources."brace-expansion-1.1.6"
2367 sources."brace-expansion-1.1.6"
2314 sources."balanced-match-0.4.2"
2368 sources."balanced-match-0.4.2"
2315 sources."concat-map-0.0.1"
2369 sources."concat-map-0.0.1"
2316 sources."date-now-0.1.4"
2370 sources."date-now-0.1.4"
2317 sources."domhandler-2.3.0"
2371 sources."domhandler-2.3.0"
2318 sources."domutils-1.5.1"
2372 sources."domutils-1.5.1"
2319 sources."domelementtype-1.3.0"
2373 sources."domelementtype-1.3.0"
2320 sources."entities-1.0.0"
2374 sources."entities-1.0.0"
2321 (sources."dom-serializer-0.1.0" // {
2375 (sources."dom-serializer-0.1.0" // {
2322 dependencies = [
2376 dependencies = [
2323 sources."domelementtype-1.1.3"
2377 sources."domelementtype-1.1.3"
2324 sources."entities-1.1.1"
2378 sources."entities-1.1.1"
2325 ];
2379 ];
2326 })
2380 })
2327 ];
2381 ];
2328 meta = {
2382 meta = {
2329 };
2383 };
2330 production = false;
2384 production = false;
2331 };
2385 };
2332 in
2386 in
2333 {
2387 {
2334 tarball = nodeEnv.buildNodeSourceDist args;
2388 tarball = nodeEnv.buildNodeSourceDist args;
2335 package = nodeEnv.buildNodePackage args;
2389 package = nodeEnv.buildNodePackage args;
2336 shell = nodeEnv.buildNodeShell args;
2390 shell = nodeEnv.buildNodeShell args;
2337 } No newline at end of file
2391 }
@@ -1,295 +1,286 b''
1 # Overrides for the generated python-packages.nix
1 # Overrides for the generated python-packages.nix
2 #
2 #
3 # This function is intended to be used as an extension to the generated file
3 # This function is intended to be used as an extension to the generated file
4 # python-packages.nix. The main objective is to add needed dependencies of C
4 # python-packages.nix. The main objective is to add needed dependencies of C
5 # libraries and tweak the build instructions where needed.
5 # libraries and tweak the build instructions where needed.
6
6
7 { pkgs, basePythonPackages }:
7 { pkgs, basePythonPackages }:
8
8
9 let
9 let
10 sed = "sed -i";
10 sed = "sed -i";
11 localLicenses = {
11 localLicenses = {
12 repoze = {
12 repoze = {
13 fullName = "Repoze License";
13 fullName = "Repoze License";
14 url = http://www.repoze.org/LICENSE.txt;
14 url = http://www.repoze.org/LICENSE.txt;
15 };
15 };
16 };
16 };
17
17
18 # johbo: Interim bridge which allows us to build with the upcoming
19 # nixos.16.09 branch (unstable at the moment of writing this note) and the
20 # current stable nixos-16.03.
21 backwardsCompatibleFetchgit = { ... }@args:
22 let
23 origSources = pkgs.fetchgit args;
24 in
25 pkgs.lib.overrideDerivation origSources (oldAttrs: {
26 NIX_PREFETCH_GIT_CHECKOUT_HOOK = ''
27 find $out -name '.git*' -print0 | xargs -0 rm -rf
28 '';
29 });
30
31 in
18 in
32
19
33 self: super: {
20 self: super: {
34
21
35 appenlight-client = super.appenlight-client.override (attrs: {
22 appenlight-client = super.appenlight-client.override (attrs: {
36 meta = {
23 meta = {
37 license = [ pkgs.lib.licenses.bsdOriginal ];
24 license = [ pkgs.lib.licenses.bsdOriginal ];
38 };
25 };
39 });
26 });
40
27
41 future = super.future.override (attrs: {
28 future = super.future.override (attrs: {
42 meta = {
29 meta = {
43 license = [ pkgs.lib.licenses.mit ];
30 license = [ pkgs.lib.licenses.mit ];
44 };
31 };
45 });
32 });
46
33
47 gnureadline = super.gnureadline.override (attrs: {
34 gnureadline = super.gnureadline.override (attrs: {
48 buildInputs = attrs.buildInputs ++ [
35 buildInputs = attrs.buildInputs ++ [
49 pkgs.ncurses
36 pkgs.ncurses
50 ];
37 ];
51 patchPhase = ''
38 patchPhase = ''
52 substituteInPlace setup.py --replace "/bin/bash" "${pkgs.bash}/bin/bash"
39 substituteInPlace setup.py --replace "/bin/bash" "${pkgs.bash}/bin/bash"
53 '';
40 '';
54 });
41 });
55
42
56 gunicorn = super.gunicorn.override (attrs: {
43 gunicorn = super.gunicorn.override (attrs: {
57 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
44 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
58 # johbo: futures is needed as long as we are on Python 2, otherwise
45 # johbo: futures is needed as long as we are on Python 2, otherwise
59 # gunicorn explodes if used with multiple threads per worker.
46 # gunicorn explodes if used with multiple threads per worker.
60 self.futures
47 self.futures
61 ];
48 ];
62 });
49 });
63
50
64 ipython = super.ipython.override (attrs: {
51 ipython = super.ipython.override (attrs: {
65 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
52 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
66 self.gnureadline
53 self.gnureadline
67 ];
54 ];
68 });
55 });
69
56
70 kombu = super.kombu.override (attrs: {
57 kombu = super.kombu.override (attrs: {
71 # The current version of kombu needs some patching to work with the
58 # The current version of kombu needs some patching to work with the
72 # other libs. Should be removed once we update celery and kombu.
59 # other libs. Should be removed once we update celery and kombu.
73 patches = [
60 patches = [
74 ./patch-kombu-py-2-7-11.diff
61 ./patch-kombu-py-2-7-11.diff
75 ./patch-kombu-msgpack.diff
62 ./patch-kombu-msgpack.diff
76 ];
63 ];
77 });
64 });
78
65
79 lxml = super.lxml.override (attrs: {
66 lxml = super.lxml.override (attrs: {
67 # johbo: On 16.09 we need this to compile on darwin, otherwise compilation
68 # fails on Darwin.
69 hardeningDisable = if pkgs.stdenv.isDarwin then [ "format" ] else null;
80 buildInputs = with self; [
70 buildInputs = with self; [
81 pkgs.libxml2
71 pkgs.libxml2
82 pkgs.libxslt
72 pkgs.libxslt
83 ];
73 ];
84 });
74 });
85
75
86 MySQL-python = super.MySQL-python.override (attrs: {
76 MySQL-python = super.MySQL-python.override (attrs: {
87 buildInputs = attrs.buildInputs ++ [
77 buildInputs = attrs.buildInputs ++ [
88 pkgs.openssl
78 pkgs.openssl
89 ];
79 ];
90 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
80 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
91 pkgs.mysql.lib
81 pkgs.mysql.lib
92 pkgs.zlib
82 pkgs.zlib
93 ];
83 ];
94 });
84 });
95
85
96 psutil = super.psutil.override (attrs: {
86 psutil = super.psutil.override (attrs: {
97 buildInputs = attrs.buildInputs ++
87 buildInputs = attrs.buildInputs ++
98 pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.IOKit;
88 pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.IOKit;
99 });
89 });
100
90
101 psycopg2 = super.psycopg2.override (attrs: {
91 psycopg2 = super.psycopg2.override (attrs: {
102 buildInputs = attrs.buildInputs ++
92 buildInputs = attrs.buildInputs ++
103 pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.openssl;
93 pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.openssl;
104 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
94 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
105 pkgs.postgresql
95 pkgs.postgresql
106 ];
96 ];
107 meta = {
97 meta = {
108 license = pkgs.lib.licenses.lgpl3Plus;
98 license = pkgs.lib.licenses.lgpl3Plus;
109 };
99 };
110 });
100 });
111
101
112 py-gfm = super.py-gfm.override {
102 py-gfm = super.py-gfm.override {
113 src = backwardsCompatibleFetchgit {
103 src = pkgs.fetchgit {
114 url = "https://code.rhodecode.com/upstream/py-gfm";
104 url = "https://code.rhodecode.com/upstream/py-gfm";
115 rev = "0d66a19bc16e3d49de273c0f797d4e4781e8c0f2";
105 rev = "0d66a19bc16e3d49de273c0f797d4e4781e8c0f2";
116 sha256 = "0ryp74jyihd3ckszq31bml5jr3bciimhfp7va7kw6ld92930ksv3";
106 sha256 = "0ryp74jyihd3ckszq31bml5jr3bciimhfp7va7kw6ld92930ksv3";
117 };
107 };
118 };
108 };
119
109
120 pycurl = super.pycurl.override (attrs: {
110 pycurl = super.pycurl.override (attrs: {
121 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
111 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
122 pkgs.curl
112 pkgs.curl
123 pkgs.openssl
113 pkgs.openssl
124 ];
114 ];
125 preConfigure = ''
115 preConfigure = ''
126 substituteInPlace setup.py --replace '--static-libs' '--libs'
116 substituteInPlace setup.py --replace '--static-libs' '--libs'
127 export PYCURL_SSL_LIBRARY=openssl
117 export PYCURL_SSL_LIBRARY=openssl
128 '';
118 '';
129 meta = {
119 meta = {
130 # TODO: It is LGPL and MIT
120 # TODO: It is LGPL and MIT
131 license = pkgs.lib.licenses.mit;
121 license = pkgs.lib.licenses.mit;
132 };
122 };
133 });
123 });
134
124
135 Pylons = super.Pylons.override (attrs: {
125 Pylons = super.Pylons.override (attrs: {
136 name = "Pylons-1.0.1-patch1";
126 name = "Pylons-1.0.1-patch1";
137 src = backwardsCompatibleFetchgit {
127 src = pkgs.fetchgit {
138 url = "https://code.rhodecode.com/upstream/pylons";
128 url = "https://code.rhodecode.com/upstream/pylons";
139 rev = "707354ee4261b9c10450404fc9852ccea4fd667d";
129 rev = "707354ee4261b9c10450404fc9852ccea4fd667d";
140 sha256 = "b2763274c2780523a335f83a1df65be22ebe4ff413a7bc9e9288d23c1f62032e";
130 sha256 = "b2763274c2780523a335f83a1df65be22ebe4ff413a7bc9e9288d23c1f62032e";
141 };
131 };
142 });
132 });
143
133
144 pyramid = super.pyramid.override (attrs: {
134 pyramid = super.pyramid.override (attrs: {
145 postFixup = ''
135 postFixup = ''
146 wrapPythonPrograms
136 wrapPythonPrograms
147 # TODO: johbo: "wrapPython" adds this magic line which
137 # TODO: johbo: "wrapPython" adds this magic line which
148 # confuses pserve.
138 # confuses pserve.
149 ${sed} '/import sys; sys.argv/d' $out/bin/.pserve-wrapped
139 ${sed} '/import sys; sys.argv/d' $out/bin/.pserve-wrapped
150 '';
140 '';
151 meta = {
141 meta = {
152 license = localLicenses.repoze;
142 license = localLicenses.repoze;
153 };
143 };
154 });
144 });
155
145
156 pyramid-debugtoolbar = super.pyramid-debugtoolbar.override (attrs: {
146 pyramid-debugtoolbar = super.pyramid-debugtoolbar.override (attrs: {
157 meta = {
147 meta = {
158 license = [ pkgs.lib.licenses.bsdOriginal localLicenses.repoze ];
148 license = [ pkgs.lib.licenses.bsdOriginal localLicenses.repoze ];
159 };
149 };
160 });
150 });
161
151
162 Pyro4 = super.Pyro4.override (attrs: {
152 Pyro4 = super.Pyro4.override (attrs: {
163 # TODO: Was not able to generate this version, needs further
153 # TODO: Was not able to generate this version, needs further
164 # investigation.
154 # investigation.
165 name = "Pyro4-4.35";
155 name = "Pyro4-4.35";
166 src = pkgs.fetchurl {
156 src = pkgs.fetchurl {
167 url = "https://pypi.python.org/packages/source/P/Pyro4/Pyro4-4.35.src.tar.gz";
157 url = "https://pypi.python.org/packages/source/P/Pyro4/Pyro4-4.35.src.tar.gz";
168 md5 = "cbe6cb855f086a0f092ca075005855f3";
158 md5 = "cbe6cb855f086a0f092ca075005855f3";
169 };
159 };
170 });
160 });
171
161
172 pysqlite = super.pysqlite.override (attrs: {
162 pysqlite = super.pysqlite.override (attrs: {
173 propagatedBuildInputs = [
163 propagatedBuildInputs = [
174 pkgs.sqlite
164 pkgs.sqlite
175 ];
165 ];
176 meta = {
166 meta = {
177 license = [ pkgs.lib.licenses.zlib pkgs.lib.licenses.libpng ];
167 license = [ pkgs.lib.licenses.zlib pkgs.lib.licenses.libpng ];
178 };
168 };
179 });
169 });
180
170
181 pytest-runner = super.pytest-runner.override (attrs: {
171 pytest-runner = super.pytest-runner.override (attrs: {
182 propagatedBuildInputs = [
172 propagatedBuildInputs = [
183 self.setuptools-scm
173 self.setuptools-scm
184 ];
174 ];
185 });
175 });
186
176
187 python-ldap = super.python-ldap.override (attrs: {
177 python-ldap = super.python-ldap.override (attrs: {
188 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
178 propagatedBuildInputs = attrs.propagatedBuildInputs ++ [
189 pkgs.cyrus_sasl
179 pkgs.cyrus_sasl
190 pkgs.openldap
180 pkgs.openldap
191 pkgs.openssl
181 pkgs.openssl
192 ];
182 ];
193 NIX_CFLAGS_COMPILE = "-I${pkgs.cyrus_sasl}/include/sasl";
183 # TODO: johbo: Remove the "or" once we drop 16.03 support.
184 NIX_CFLAGS_COMPILE = "-I${pkgs.cyrus_sasl.dev or pkgs.cyrus_sasl}/include/sasl";
194 });
185 });
195
186
196 python-pam = super.python-pam.override (attrs:
187 python-pam = super.python-pam.override (attrs:
197 let
188 let
198 includeLibPam = pkgs.stdenv.isLinux;
189 includeLibPam = pkgs.stdenv.isLinux;
199 in {
190 in {
200 # TODO: johbo: Move the option up into the default.nix, we should
191 # TODO: johbo: Move the option up into the default.nix, we should
201 # include python-pam only on supported platforms.
192 # include python-pam only on supported platforms.
202 propagatedBuildInputs = attrs.propagatedBuildInputs ++
193 propagatedBuildInputs = attrs.propagatedBuildInputs ++
203 pkgs.lib.optional includeLibPam [
194 pkgs.lib.optional includeLibPam [
204 pkgs.pam
195 pkgs.pam
205 ];
196 ];
206 # TODO: johbo: Check if this can be avoided, or transform into
197 # TODO: johbo: Check if this can be avoided, or transform into
207 # a real patch
198 # a real patch
208 patchPhase = pkgs.lib.optionals includeLibPam ''
199 patchPhase = pkgs.lib.optionals includeLibPam ''
209 substituteInPlace pam.py \
200 substituteInPlace pam.py \
210 --replace 'find_library("pam")' '"${pkgs.pam}/lib/libpam.so.0"'
201 --replace 'find_library("pam")' '"${pkgs.pam}/lib/libpam.so.0"'
211 '';
202 '';
212 });
203 });
213
204
214 rhodecode-tools = super.rhodecode-tools.override (attrs: {
205 rhodecode-tools = super.rhodecode-tools.override (attrs: {
215 patches = [
206 patches = [
216 ./patch-rhodecode-tools-setup.diff
207 ./patch-rhodecode-tools-setup.diff
217 ];
208 ];
218 });
209 });
219
210
220 URLObject = super.URLObject.override (attrs: {
211 URLObject = super.URLObject.override (attrs: {
221 meta = {
212 meta = {
222 license = {
213 license = {
223 spdxId = "Unlicense";
214 spdxId = "Unlicense";
224 fullName = "The Unlicense";
215 fullName = "The Unlicense";
225 url = http://unlicense.org/;
216 url = http://unlicense.org/;
226 };
217 };
227 };
218 };
228 });
219 });
229
220
230 amqplib = super.amqplib.override (attrs: {
221 amqplib = super.amqplib.override (attrs: {
231 meta = {
222 meta = {
232 license = pkgs.lib.licenses.lgpl3;
223 license = pkgs.lib.licenses.lgpl3;
233 };
224 };
234 });
225 });
235
226
236 docutils = super.docutils.override (attrs: {
227 docutils = super.docutils.override (attrs: {
237 meta = {
228 meta = {
238 license = pkgs.lib.licenses.bsd2;
229 license = pkgs.lib.licenses.bsd2;
239 };
230 };
240 });
231 });
241
232
242 colander = super.colander.override (attrs: {
233 colander = super.colander.override (attrs: {
243 meta = {
234 meta = {
244 license = localLicenses.repoze;
235 license = localLicenses.repoze;
245 };
236 };
246 });
237 });
247
238
248 pyramid-beaker = super.pyramid-beaker.override (attrs: {
239 pyramid-beaker = super.pyramid-beaker.override (attrs: {
249 meta = {
240 meta = {
250 license = localLicenses.repoze;
241 license = localLicenses.repoze;
251 };
242 };
252 });
243 });
253
244
254 pyramid-mako = super.pyramid-mako.override (attrs: {
245 pyramid-mako = super.pyramid-mako.override (attrs: {
255 meta = {
246 meta = {
256 license = localLicenses.repoze;
247 license = localLicenses.repoze;
257 };
248 };
258 });
249 });
259
250
260 repoze.lru = super.repoze.lru.override (attrs: {
251 repoze.lru = super.repoze.lru.override (attrs: {
261 meta = {
252 meta = {
262 license = localLicenses.repoze;
253 license = localLicenses.repoze;
263 };
254 };
264 });
255 });
265
256
266 recaptcha-client = super.recaptcha-client.override (attrs: {
257 recaptcha-client = super.recaptcha-client.override (attrs: {
267 meta = {
258 meta = {
268 # TODO: It is MIT/X11
259 # TODO: It is MIT/X11
269 license = pkgs.lib.licenses.mit;
260 license = pkgs.lib.licenses.mit;
270 };
261 };
271 });
262 });
272
263
273 python-editor = super.python-editor.override (attrs: {
264 python-editor = super.python-editor.override (attrs: {
274 meta = {
265 meta = {
275 license = pkgs.lib.licenses.asl20;
266 license = pkgs.lib.licenses.asl20;
276 };
267 };
277 });
268 });
278
269
279 translationstring = super.translationstring.override (attrs: {
270 translationstring = super.translationstring.override (attrs: {
280 meta = {
271 meta = {
281 license = localLicenses.repoze;
272 license = localLicenses.repoze;
282 };
273 };
283 });
274 });
284
275
285 venusian = super.venusian.override (attrs: {
276 venusian = super.venusian.override (attrs: {
286 meta = {
277 meta = {
287 license = localLicenses.repoze;
278 license = localLicenses.repoze;
288 };
279 };
289 });
280 });
290
281
291 # Avoid that setuptools is replaced, this leads to trouble
282 # Avoid that setuptools is replaced, this leads to trouble
292 # with buildPythonPackage.
283 # with buildPythonPackage.
293 setuptools = basePythonPackages.setuptools;
284 setuptools = basePythonPackages.setuptools;
294
285
295 }
286 }
@@ -1,1722 +1,1864 b''
1 # Generated by pip2nix 0.4.0.dev1
1 # Generated by pip2nix 0.4.0.dev1
2 # See https://github.com/johbo/pip2nix
2 # See https://github.com/johbo/pip2nix
3
3
4 {
4 {
5 Babel = super.buildPythonPackage {
5 Babel = super.buildPythonPackage {
6 name = "Babel-1.3";
6 name = "Babel-1.3";
7 buildInputs = with self; [];
7 buildInputs = with self; [];
8 doCheck = false;
8 doCheck = false;
9 propagatedBuildInputs = with self; [pytz];
9 propagatedBuildInputs = with self; [pytz];
10 src = fetchurl {
10 src = fetchurl {
11 url = "https://pypi.python.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz";
11 url = "https://pypi.python.org/packages/33/27/e3978243a03a76398c384c83f7ca879bc6e8f1511233a621fcada135606e/Babel-1.3.tar.gz";
12 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
12 md5 = "5264ceb02717843cbc9ffce8e6e06bdb";
13 };
13 };
14 meta = {
14 meta = {
15 license = [ pkgs.lib.licenses.bsdOriginal ];
15 license = [ pkgs.lib.licenses.bsdOriginal ];
16 };
16 };
17 };
17 };
18 Beaker = super.buildPythonPackage {
18 Beaker = super.buildPythonPackage {
19 name = "Beaker-1.7.0";
19 name = "Beaker-1.7.0";
20 buildInputs = with self; [];
20 buildInputs = with self; [];
21 doCheck = false;
21 doCheck = false;
22 propagatedBuildInputs = with self; [];
22 propagatedBuildInputs = with self; [];
23 src = fetchurl {
23 src = fetchurl {
24 url = "https://pypi.python.org/packages/97/8e/409d2e7c009b8aa803dc9e6f239f1db7c3cdf578249087a404e7c27a505d/Beaker-1.7.0.tar.gz";
24 url = "https://pypi.python.org/packages/97/8e/409d2e7c009b8aa803dc9e6f239f1db7c3cdf578249087a404e7c27a505d/Beaker-1.7.0.tar.gz";
25 md5 = "386be3f7fe427358881eee4622b428b3";
25 md5 = "386be3f7fe427358881eee4622b428b3";
26 };
26 };
27 meta = {
27 meta = {
28 license = [ pkgs.lib.licenses.bsdOriginal ];
28 license = [ pkgs.lib.licenses.bsdOriginal ];
29 };
29 };
30 };
30 };
31 CProfileV = super.buildPythonPackage {
31 CProfileV = super.buildPythonPackage {
32 name = "CProfileV-1.0.6";
32 name = "CProfileV-1.0.6";
33 buildInputs = with self; [];
33 buildInputs = with self; [];
34 doCheck = false;
34 doCheck = false;
35 propagatedBuildInputs = with self; [bottle];
35 propagatedBuildInputs = with self; [bottle];
36 src = fetchurl {
36 src = fetchurl {
37 url = "https://pypi.python.org/packages/eb/df/983a0b6cfd3ac94abf023f5011cb04f33613ace196e33f53c86cf91850d5/CProfileV-1.0.6.tar.gz";
37 url = "https://pypi.python.org/packages/eb/df/983a0b6cfd3ac94abf023f5011cb04f33613ace196e33f53c86cf91850d5/CProfileV-1.0.6.tar.gz";
38 md5 = "08c7c242b6e64237bc53c5d13537e03d";
38 md5 = "08c7c242b6e64237bc53c5d13537e03d";
39 };
39 };
40 meta = {
40 meta = {
41 license = [ pkgs.lib.licenses.mit ];
41 license = [ pkgs.lib.licenses.mit ];
42 };
42 };
43 };
43 };
44 Chameleon = super.buildPythonPackage {
44 Chameleon = super.buildPythonPackage {
45 name = "Chameleon-2.24";
45 name = "Chameleon-2.24";
46 buildInputs = with self; [];
46 buildInputs = with self; [];
47 doCheck = false;
47 doCheck = false;
48 propagatedBuildInputs = with self; [];
48 propagatedBuildInputs = with self; [];
49 src = fetchurl {
49 src = fetchurl {
50 url = "https://pypi.python.org/packages/5a/9e/637379ffa13c5172b5c0e704833ffea6bf51cec7567f93fd6e903d53ed74/Chameleon-2.24.tar.gz";
50 url = "https://pypi.python.org/packages/5a/9e/637379ffa13c5172b5c0e704833ffea6bf51cec7567f93fd6e903d53ed74/Chameleon-2.24.tar.gz";
51 md5 = "1b01f1f6533a8a11d0d2f2366dec5342";
51 md5 = "1b01f1f6533a8a11d0d2f2366dec5342";
52 };
52 };
53 meta = {
53 meta = {
54 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
54 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
55 };
55 };
56 };
56 };
57 FormEncode = super.buildPythonPackage {
57 FormEncode = super.buildPythonPackage {
58 name = "FormEncode-1.2.4";
58 name = "FormEncode-1.2.4";
59 buildInputs = with self; [];
59 buildInputs = with self; [];
60 doCheck = false;
60 doCheck = false;
61 propagatedBuildInputs = with self; [];
61 propagatedBuildInputs = with self; [];
62 src = fetchurl {
62 src = fetchurl {
63 url = "https://pypi.python.org/packages/8e/59/0174271a6f004512e0201188593e6d319db139d14cb7490e488bbb078015/FormEncode-1.2.4.tar.gz";
63 url = "https://pypi.python.org/packages/8e/59/0174271a6f004512e0201188593e6d319db139d14cb7490e488bbb078015/FormEncode-1.2.4.tar.gz";
64 md5 = "6bc17fb9aed8aea198975e888e2077f4";
64 md5 = "6bc17fb9aed8aea198975e888e2077f4";
65 };
65 };
66 meta = {
66 meta = {
67 license = [ pkgs.lib.licenses.psfl ];
67 license = [ pkgs.lib.licenses.psfl ];
68 };
68 };
69 };
69 };
70 Jinja2 = super.buildPythonPackage {
70 Jinja2 = super.buildPythonPackage {
71 name = "Jinja2-2.7.3";
71 name = "Jinja2-2.7.3";
72 buildInputs = with self; [];
72 buildInputs = with self; [];
73 doCheck = false;
73 doCheck = false;
74 propagatedBuildInputs = with self; [MarkupSafe];
74 propagatedBuildInputs = with self; [MarkupSafe];
75 src = fetchurl {
75 src = fetchurl {
76 url = "https://pypi.python.org/packages/b0/73/eab0bca302d6d6a0b5c402f47ad1760dc9cb2dd14bbc1873ad48db258e4d/Jinja2-2.7.3.tar.gz";
76 url = "https://pypi.python.org/packages/b0/73/eab0bca302d6d6a0b5c402f47ad1760dc9cb2dd14bbc1873ad48db258e4d/Jinja2-2.7.3.tar.gz";
77 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
77 md5 = "b9dffd2f3b43d673802fe857c8445b1a";
78 };
78 };
79 meta = {
79 meta = {
80 license = [ pkgs.lib.licenses.bsdOriginal ];
80 license = [ pkgs.lib.licenses.bsdOriginal ];
81 };
81 };
82 };
82 };
83 Mako = super.buildPythonPackage {
83 Mako = super.buildPythonPackage {
84 name = "Mako-1.0.1";
84 name = "Mako-1.0.1";
85 buildInputs = with self; [];
85 buildInputs = with self; [];
86 doCheck = false;
86 doCheck = false;
87 propagatedBuildInputs = with self; [MarkupSafe];
87 propagatedBuildInputs = with self; [MarkupSafe];
88 src = fetchurl {
88 src = fetchurl {
89 url = "https://pypi.python.org/packages/8e/a4/aa56533ecaa5f22ca92428f74e074d0c9337282933c722391902c8f9e0f8/Mako-1.0.1.tar.gz";
89 url = "https://pypi.python.org/packages/8e/a4/aa56533ecaa5f22ca92428f74e074d0c9337282933c722391902c8f9e0f8/Mako-1.0.1.tar.gz";
90 md5 = "9f0aafd177b039ef67b90ea350497a54";
90 md5 = "9f0aafd177b039ef67b90ea350497a54";
91 };
91 };
92 meta = {
92 meta = {
93 license = [ pkgs.lib.licenses.mit ];
93 license = [ pkgs.lib.licenses.mit ];
94 };
94 };
95 };
95 };
96 Markdown = super.buildPythonPackage {
96 Markdown = super.buildPythonPackage {
97 name = "Markdown-2.6.2";
97 name = "Markdown-2.6.2";
98 buildInputs = with self; [];
98 buildInputs = with self; [];
99 doCheck = false;
99 doCheck = false;
100 propagatedBuildInputs = with self; [];
100 propagatedBuildInputs = with self; [];
101 src = fetchurl {
101 src = fetchurl {
102 url = "https://pypi.python.org/packages/62/8b/83658b5f6c220d5fcde9f9852d46ea54765d734cfbc5a9f4c05bfc36db4d/Markdown-2.6.2.tar.gz";
102 url = "https://pypi.python.org/packages/62/8b/83658b5f6c220d5fcde9f9852d46ea54765d734cfbc5a9f4c05bfc36db4d/Markdown-2.6.2.tar.gz";
103 md5 = "256d19afcc564dc4ce4c229bb762f7ae";
103 md5 = "256d19afcc564dc4ce4c229bb762f7ae";
104 };
104 };
105 meta = {
105 meta = {
106 license = [ pkgs.lib.licenses.bsdOriginal ];
106 license = [ pkgs.lib.licenses.bsdOriginal ];
107 };
107 };
108 };
108 };
109 MarkupSafe = super.buildPythonPackage {
109 MarkupSafe = super.buildPythonPackage {
110 name = "MarkupSafe-0.23";
110 name = "MarkupSafe-0.23";
111 buildInputs = with self; [];
111 buildInputs = with self; [];
112 doCheck = false;
112 doCheck = false;
113 propagatedBuildInputs = with self; [];
113 propagatedBuildInputs = with self; [];
114 src = fetchurl {
114 src = fetchurl {
115 url = "https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz";
115 url = "https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz";
116 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
116 md5 = "f5ab3deee4c37cd6a922fb81e730da6e";
117 };
117 };
118 meta = {
118 meta = {
119 license = [ pkgs.lib.licenses.bsdOriginal ];
119 license = [ pkgs.lib.licenses.bsdOriginal ];
120 };
120 };
121 };
121 };
122 MySQL-python = super.buildPythonPackage {
122 MySQL-python = super.buildPythonPackage {
123 name = "MySQL-python-1.2.5";
123 name = "MySQL-python-1.2.5";
124 buildInputs = with self; [];
124 buildInputs = with self; [];
125 doCheck = false;
125 doCheck = false;
126 propagatedBuildInputs = with self; [];
126 propagatedBuildInputs = with self; [];
127 src = fetchurl {
127 src = fetchurl {
128 url = "https://pypi.python.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip";
128 url = "https://pypi.python.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip";
129 md5 = "654f75b302db6ed8dc5a898c625e030c";
129 md5 = "654f75b302db6ed8dc5a898c625e030c";
130 };
130 };
131 meta = {
131 meta = {
132 license = [ pkgs.lib.licenses.gpl1 ];
132 license = [ pkgs.lib.licenses.gpl1 ];
133 };
133 };
134 };
134 };
135 Paste = super.buildPythonPackage {
135 Paste = super.buildPythonPackage {
136 name = "Paste-2.0.2";
136 name = "Paste-2.0.2";
137 buildInputs = with self; [];
137 buildInputs = with self; [];
138 doCheck = false;
138 doCheck = false;
139 propagatedBuildInputs = with self; [six];
139 propagatedBuildInputs = with self; [six];
140 src = fetchurl {
140 src = fetchurl {
141 url = "https://pypi.python.org/packages/d5/8d/0f8ac40687b97ff3e07ebd1369be20bdb3f93864d2dc3c2ff542edb4ce50/Paste-2.0.2.tar.gz";
141 url = "https://pypi.python.org/packages/d5/8d/0f8ac40687b97ff3e07ebd1369be20bdb3f93864d2dc3c2ff542edb4ce50/Paste-2.0.2.tar.gz";
142 md5 = "4bfc8a7eaf858f6309d2ac0f40fc951c";
142 md5 = "4bfc8a7eaf858f6309d2ac0f40fc951c";
143 };
143 };
144 meta = {
144 meta = {
145 license = [ pkgs.lib.licenses.mit ];
145 license = [ pkgs.lib.licenses.mit ];
146 };
146 };
147 };
147 };
148 PasteDeploy = super.buildPythonPackage {
148 PasteDeploy = super.buildPythonPackage {
149 name = "PasteDeploy-1.5.2";
149 name = "PasteDeploy-1.5.2";
150 buildInputs = with self; [];
150 buildInputs = with self; [];
151 doCheck = false;
151 doCheck = false;
152 propagatedBuildInputs = with self; [];
152 propagatedBuildInputs = with self; [];
153 src = fetchurl {
153 src = fetchurl {
154 url = "https://pypi.python.org/packages/0f/90/8e20cdae206c543ea10793cbf4136eb9a8b3f417e04e40a29d72d9922cbd/PasteDeploy-1.5.2.tar.gz";
154 url = "https://pypi.python.org/packages/0f/90/8e20cdae206c543ea10793cbf4136eb9a8b3f417e04e40a29d72d9922cbd/PasteDeploy-1.5.2.tar.gz";
155 md5 = "352b7205c78c8de4987578d19431af3b";
155 md5 = "352b7205c78c8de4987578d19431af3b";
156 };
156 };
157 meta = {
157 meta = {
158 license = [ pkgs.lib.licenses.mit ];
158 license = [ pkgs.lib.licenses.mit ];
159 };
159 };
160 };
160 };
161 PasteScript = super.buildPythonPackage {
161 PasteScript = super.buildPythonPackage {
162 name = "PasteScript-1.7.5";
162 name = "PasteScript-1.7.5";
163 buildInputs = with self; [];
163 buildInputs = with self; [];
164 doCheck = false;
164 doCheck = false;
165 propagatedBuildInputs = with self; [Paste PasteDeploy];
165 propagatedBuildInputs = with self; [Paste PasteDeploy];
166 src = fetchurl {
166 src = fetchurl {
167 url = "https://pypi.python.org/packages/a5/05/fc60efa7c2f17a1dbaeccb2a903a1e90902d92b9d00eebabe3095829d806/PasteScript-1.7.5.tar.gz";
167 url = "https://pypi.python.org/packages/a5/05/fc60efa7c2f17a1dbaeccb2a903a1e90902d92b9d00eebabe3095829d806/PasteScript-1.7.5.tar.gz";
168 md5 = "4c72d78dcb6bb993f30536842c16af4d";
168 md5 = "4c72d78dcb6bb993f30536842c16af4d";
169 };
169 };
170 meta = {
170 meta = {
171 license = [ pkgs.lib.licenses.mit ];
171 license = [ pkgs.lib.licenses.mit ];
172 };
172 };
173 };
173 };
174 Pygments = super.buildPythonPackage {
174 Pygments = super.buildPythonPackage {
175 name = "Pygments-2.1.3";
175 name = "Pygments-2.1.3";
176 buildInputs = with self; [];
176 buildInputs = with self; [];
177 doCheck = false;
177 doCheck = false;
178 propagatedBuildInputs = with self; [];
178 propagatedBuildInputs = with self; [];
179 src = fetchurl {
179 src = fetchurl {
180 url = "https://pypi.python.org/packages/b8/67/ab177979be1c81bc99c8d0592ef22d547e70bb4c6815c383286ed5dec504/Pygments-2.1.3.tar.gz";
180 url = "https://pypi.python.org/packages/b8/67/ab177979be1c81bc99c8d0592ef22d547e70bb4c6815c383286ed5dec504/Pygments-2.1.3.tar.gz";
181 md5 = "ed3fba2467c8afcda4d317e4ef2c6150";
181 md5 = "ed3fba2467c8afcda4d317e4ef2c6150";
182 };
182 };
183 meta = {
183 meta = {
184 license = [ pkgs.lib.licenses.bsdOriginal ];
184 license = [ pkgs.lib.licenses.bsdOriginal ];
185 };
185 };
186 };
186 };
187 Pylons = super.buildPythonPackage {
187 Pylons = super.buildPythonPackage {
188 name = "Pylons-1.0.1";
188 name = "Pylons-1.0.1";
189 buildInputs = with self; [];
189 buildInputs = with self; [];
190 doCheck = false;
190 doCheck = false;
191 propagatedBuildInputs = with self; [Routes WebHelpers Beaker Paste PasteDeploy PasteScript FormEncode simplejson decorator nose Mako WebError WebTest Tempita MarkupSafe WebOb];
191 propagatedBuildInputs = with self; [Routes WebHelpers Beaker Paste PasteDeploy PasteScript FormEncode simplejson decorator nose Mako WebError WebTest Tempita MarkupSafe WebOb];
192 src = fetchurl {
192 src = fetchurl {
193 url = "https://pypi.python.org/packages/a2/69/b835a6bad00acbfeed3f33c6e44fa3f936efc998c795bfb15c61a79ecf62/Pylons-1.0.1.tar.gz";
193 url = "https://pypi.python.org/packages/a2/69/b835a6bad00acbfeed3f33c6e44fa3f936efc998c795bfb15c61a79ecf62/Pylons-1.0.1.tar.gz";
194 md5 = "6cb880d75fa81213192142b07a6e4915";
194 md5 = "6cb880d75fa81213192142b07a6e4915";
195 };
195 };
196 meta = {
196 meta = {
197 license = [ pkgs.lib.licenses.bsdOriginal ];
197 license = [ pkgs.lib.licenses.bsdOriginal ];
198 };
198 };
199 };
199 };
200 Pyro4 = super.buildPythonPackage {
200 Pyro4 = super.buildPythonPackage {
201 name = "Pyro4-4.41";
201 name = "Pyro4-4.41";
202 buildInputs = with self; [];
202 buildInputs = with self; [];
203 doCheck = false;
203 doCheck = false;
204 propagatedBuildInputs = with self; [serpent];
204 propagatedBuildInputs = with self; [serpent];
205 src = fetchurl {
205 src = fetchurl {
206 url = "https://pypi.python.org/packages/56/2b/89b566b4bf3e7f8ba790db2d1223852f8cb454c52cab7693dd41f608ca2a/Pyro4-4.41.tar.gz";
206 url = "https://pypi.python.org/packages/56/2b/89b566b4bf3e7f8ba790db2d1223852f8cb454c52cab7693dd41f608ca2a/Pyro4-4.41.tar.gz";
207 md5 = "ed69e9bfafa9c06c049a87cb0c4c2b6c";
207 md5 = "ed69e9bfafa9c06c049a87cb0c4c2b6c";
208 };
208 };
209 meta = {
209 meta = {
210 license = [ pkgs.lib.licenses.mit ];
210 license = [ pkgs.lib.licenses.mit ];
211 };
211 };
212 };
212 };
213 Routes = super.buildPythonPackage {
213 Routes = super.buildPythonPackage {
214 name = "Routes-1.13";
214 name = "Routes-1.13";
215 buildInputs = with self; [];
215 buildInputs = with self; [];
216 doCheck = false;
216 doCheck = false;
217 propagatedBuildInputs = with self; [repoze.lru];
217 propagatedBuildInputs = with self; [repoze.lru];
218 src = fetchurl {
218 src = fetchurl {
219 url = "https://pypi.python.org/packages/88/d3/259c3b3cde8837eb9441ab5f574a660e8a4acea8f54a078441d4d2acac1c/Routes-1.13.tar.gz";
219 url = "https://pypi.python.org/packages/88/d3/259c3b3cde8837eb9441ab5f574a660e8a4acea8f54a078441d4d2acac1c/Routes-1.13.tar.gz";
220 md5 = "d527b0ab7dd9172b1275a41f97448783";
220 md5 = "d527b0ab7dd9172b1275a41f97448783";
221 };
221 };
222 meta = {
222 meta = {
223 license = [ pkgs.lib.licenses.bsdOriginal ];
223 license = [ pkgs.lib.licenses.bsdOriginal ];
224 };
224 };
225 };
225 };
226 SQLAlchemy = super.buildPythonPackage {
226 SQLAlchemy = super.buildPythonPackage {
227 name = "SQLAlchemy-0.9.9";
227 name = "SQLAlchemy-0.9.9";
228 buildInputs = with self; [];
228 buildInputs = with self; [];
229 doCheck = false;
229 doCheck = false;
230 propagatedBuildInputs = with self; [];
230 propagatedBuildInputs = with self; [];
231 src = fetchurl {
231 src = fetchurl {
232 url = "https://pypi.python.org/packages/28/f7/1bbfd0d8597e8c358d5e15a166a486ad82fc5579b4e67b6ef7c05b1d182b/SQLAlchemy-0.9.9.tar.gz";
232 url = "https://pypi.python.org/packages/28/f7/1bbfd0d8597e8c358d5e15a166a486ad82fc5579b4e67b6ef7c05b1d182b/SQLAlchemy-0.9.9.tar.gz";
233 md5 = "8a10a9bd13ed3336ef7333ac2cc679ff";
233 md5 = "8a10a9bd13ed3336ef7333ac2cc679ff";
234 };
234 };
235 meta = {
235 meta = {
236 license = [ pkgs.lib.licenses.mit ];
236 license = [ pkgs.lib.licenses.mit ];
237 };
237 };
238 };
238 };
239 Sphinx = super.buildPythonPackage {
239 Sphinx = super.buildPythonPackage {
240 name = "Sphinx-1.2.2";
240 name = "Sphinx-1.2.2";
241 buildInputs = with self; [];
241 buildInputs = with self; [];
242 doCheck = false;
242 doCheck = false;
243 propagatedBuildInputs = with self; [Pygments docutils Jinja2];
243 propagatedBuildInputs = with self; [Pygments docutils Jinja2];
244 src = fetchurl {
244 src = fetchurl {
245 url = "https://pypi.python.org/packages/0a/50/34017e6efcd372893a416aba14b84a1a149fc7074537b0e9cb6ca7b7abe9/Sphinx-1.2.2.tar.gz";
245 url = "https://pypi.python.org/packages/0a/50/34017e6efcd372893a416aba14b84a1a149fc7074537b0e9cb6ca7b7abe9/Sphinx-1.2.2.tar.gz";
246 md5 = "3dc73ccaa8d0bfb2d62fb671b1f7e8a4";
246 md5 = "3dc73ccaa8d0bfb2d62fb671b1f7e8a4";
247 };
247 };
248 meta = {
248 meta = {
249 license = [ pkgs.lib.licenses.bsdOriginal ];
249 license = [ pkgs.lib.licenses.bsdOriginal ];
250 };
250 };
251 };
251 };
252 Tempita = super.buildPythonPackage {
252 Tempita = super.buildPythonPackage {
253 name = "Tempita-0.5.2";
253 name = "Tempita-0.5.2";
254 buildInputs = with self; [];
254 buildInputs = with self; [];
255 doCheck = false;
255 doCheck = false;
256 propagatedBuildInputs = with self; [];
256 propagatedBuildInputs = with self; [];
257 src = fetchurl {
257 src = fetchurl {
258 url = "https://pypi.python.org/packages/56/c8/8ed6eee83dbddf7b0fc64dd5d4454bc05e6ccaafff47991f73f2894d9ff4/Tempita-0.5.2.tar.gz";
258 url = "https://pypi.python.org/packages/56/c8/8ed6eee83dbddf7b0fc64dd5d4454bc05e6ccaafff47991f73f2894d9ff4/Tempita-0.5.2.tar.gz";
259 md5 = "4c2f17bb9d481821c41b6fbee904cea1";
259 md5 = "4c2f17bb9d481821c41b6fbee904cea1";
260 };
260 };
261 meta = {
261 meta = {
262 license = [ pkgs.lib.licenses.mit ];
262 license = [ pkgs.lib.licenses.mit ];
263 };
263 };
264 };
264 };
265 URLObject = super.buildPythonPackage {
265 URLObject = super.buildPythonPackage {
266 name = "URLObject-2.4.0";
266 name = "URLObject-2.4.0";
267 buildInputs = with self; [];
267 buildInputs = with self; [];
268 doCheck = false;
268 doCheck = false;
269 propagatedBuildInputs = with self; [];
269 propagatedBuildInputs = with self; [];
270 src = fetchurl {
270 src = fetchurl {
271 url = "https://pypi.python.org/packages/cb/b6/e25e58500f9caef85d664bec71ec67c116897bfebf8622c32cb75d1ca199/URLObject-2.4.0.tar.gz";
271 url = "https://pypi.python.org/packages/cb/b6/e25e58500f9caef85d664bec71ec67c116897bfebf8622c32cb75d1ca199/URLObject-2.4.0.tar.gz";
272 md5 = "2ed819738a9f0a3051f31dc9924e3065";
272 md5 = "2ed819738a9f0a3051f31dc9924e3065";
273 };
273 };
274 meta = {
274 meta = {
275 license = [ ];
275 license = [ ];
276 };
276 };
277 };
277 };
278 WebError = super.buildPythonPackage {
278 WebError = super.buildPythonPackage {
279 name = "WebError-0.10.3";
279 name = "WebError-0.10.3";
280 buildInputs = with self; [];
280 buildInputs = with self; [];
281 doCheck = false;
281 doCheck = false;
282 propagatedBuildInputs = with self; [WebOb Tempita Pygments Paste];
282 propagatedBuildInputs = with self; [WebOb Tempita Pygments Paste];
283 src = fetchurl {
283 src = fetchurl {
284 url = "https://pypi.python.org/packages/35/76/e7e5c2ce7e9c7f31b54c1ff295a495886d1279a002557d74dd8957346a79/WebError-0.10.3.tar.gz";
284 url = "https://pypi.python.org/packages/35/76/e7e5c2ce7e9c7f31b54c1ff295a495886d1279a002557d74dd8957346a79/WebError-0.10.3.tar.gz";
285 md5 = "84b9990b0baae6fd440b1e60cdd06f9a";
285 md5 = "84b9990b0baae6fd440b1e60cdd06f9a";
286 };
286 };
287 meta = {
287 meta = {
288 license = [ pkgs.lib.licenses.mit ];
288 license = [ pkgs.lib.licenses.mit ];
289 };
289 };
290 };
290 };
291 WebHelpers = super.buildPythonPackage {
291 WebHelpers = super.buildPythonPackage {
292 name = "WebHelpers-1.3";
292 name = "WebHelpers-1.3";
293 buildInputs = with self; [];
293 buildInputs = with self; [];
294 doCheck = false;
294 doCheck = false;
295 propagatedBuildInputs = with self; [MarkupSafe];
295 propagatedBuildInputs = with self; [MarkupSafe];
296 src = fetchurl {
296 src = fetchurl {
297 url = "https://pypi.python.org/packages/ee/68/4d07672821d514184357f1552f2dad923324f597e722de3b016ca4f7844f/WebHelpers-1.3.tar.gz";
297 url = "https://pypi.python.org/packages/ee/68/4d07672821d514184357f1552f2dad923324f597e722de3b016ca4f7844f/WebHelpers-1.3.tar.gz";
298 md5 = "32749ffadfc40fea51075a7def32588b";
298 md5 = "32749ffadfc40fea51075a7def32588b";
299 };
299 };
300 meta = {
300 meta = {
301 license = [ pkgs.lib.licenses.bsdOriginal ];
301 license = [ pkgs.lib.licenses.bsdOriginal ];
302 };
302 };
303 };
303 };
304 WebHelpers2 = super.buildPythonPackage {
304 WebHelpers2 = super.buildPythonPackage {
305 name = "WebHelpers2-2.0";
305 name = "WebHelpers2-2.0";
306 buildInputs = with self; [];
306 buildInputs = with self; [];
307 doCheck = false;
307 doCheck = false;
308 propagatedBuildInputs = with self; [MarkupSafe six];
308 propagatedBuildInputs = with self; [MarkupSafe six];
309 src = fetchurl {
309 src = fetchurl {
310 url = "https://pypi.python.org/packages/ff/30/56342c6ea522439e3662427c8d7b5e5b390dff4ff2dc92d8afcb8ab68b75/WebHelpers2-2.0.tar.gz";
310 url = "https://pypi.python.org/packages/ff/30/56342c6ea522439e3662427c8d7b5e5b390dff4ff2dc92d8afcb8ab68b75/WebHelpers2-2.0.tar.gz";
311 md5 = "0f6b68d70c12ee0aed48c00b24da13d3";
311 md5 = "0f6b68d70c12ee0aed48c00b24da13d3";
312 };
312 };
313 meta = {
313 meta = {
314 license = [ pkgs.lib.licenses.mit ];
314 license = [ pkgs.lib.licenses.mit ];
315 };
315 };
316 };
316 };
317 WebOb = super.buildPythonPackage {
317 WebOb = super.buildPythonPackage {
318 name = "WebOb-1.3.1";
318 name = "WebOb-1.3.1";
319 buildInputs = with self; [];
319 buildInputs = with self; [];
320 doCheck = false;
320 doCheck = false;
321 propagatedBuildInputs = with self; [];
321 propagatedBuildInputs = with self; [];
322 src = fetchurl {
322 src = fetchurl {
323 url = "https://pypi.python.org/packages/16/78/adfc0380b8a0d75b2d543fa7085ba98a573b1ae486d9def88d172b81b9fa/WebOb-1.3.1.tar.gz";
323 url = "https://pypi.python.org/packages/16/78/adfc0380b8a0d75b2d543fa7085ba98a573b1ae486d9def88d172b81b9fa/WebOb-1.3.1.tar.gz";
324 md5 = "20918251c5726956ba8fef22d1556177";
324 md5 = "20918251c5726956ba8fef22d1556177";
325 };
325 };
326 meta = {
326 meta = {
327 license = [ pkgs.lib.licenses.mit ];
327 license = [ pkgs.lib.licenses.mit ];
328 };
328 };
329 };
329 };
330 WebTest = super.buildPythonPackage {
330 WebTest = super.buildPythonPackage {
331 name = "WebTest-1.4.3";
331 name = "WebTest-1.4.3";
332 buildInputs = with self; [];
332 buildInputs = with self; [];
333 doCheck = false;
333 doCheck = false;
334 propagatedBuildInputs = with self; [WebOb];
334 propagatedBuildInputs = with self; [WebOb];
335 src = fetchurl {
335 src = fetchurl {
336 url = "https://pypi.python.org/packages/51/3d/84fd0f628df10b30c7db87895f56d0158e5411206b721ca903cb51bfd948/WebTest-1.4.3.zip";
336 url = "https://pypi.python.org/packages/51/3d/84fd0f628df10b30c7db87895f56d0158e5411206b721ca903cb51bfd948/WebTest-1.4.3.zip";
337 md5 = "631ce728bed92c681a4020a36adbc353";
337 md5 = "631ce728bed92c681a4020a36adbc353";
338 };
338 };
339 meta = {
339 meta = {
340 license = [ pkgs.lib.licenses.mit ];
340 license = [ pkgs.lib.licenses.mit ];
341 };
341 };
342 };
342 };
343 Whoosh = super.buildPythonPackage {
343 Whoosh = super.buildPythonPackage {
344 name = "Whoosh-2.7.0";
344 name = "Whoosh-2.7.0";
345 buildInputs = with self; [];
345 buildInputs = with self; [];
346 doCheck = false;
346 doCheck = false;
347 propagatedBuildInputs = with self; [];
347 propagatedBuildInputs = with self; [];
348 src = fetchurl {
348 src = fetchurl {
349 url = "https://pypi.python.org/packages/1c/dc/2f0231ff3875ded36df8c1ab851451e51a237dc0e5a86d3d96036158da94/Whoosh-2.7.0.zip";
349 url = "https://pypi.python.org/packages/1c/dc/2f0231ff3875ded36df8c1ab851451e51a237dc0e5a86d3d96036158da94/Whoosh-2.7.0.zip";
350 md5 = "7abfd970f16fadc7311960f3fa0bc7a9";
350 md5 = "7abfd970f16fadc7311960f3fa0bc7a9";
351 };
351 };
352 meta = {
352 meta = {
353 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.bsd2 ];
353 license = [ pkgs.lib.licenses.bsdOriginal pkgs.lib.licenses.bsd2 ];
354 };
354 };
355 };
355 };
356 alembic = super.buildPythonPackage {
356 alembic = super.buildPythonPackage {
357 name = "alembic-0.8.4";
357 name = "alembic-0.8.4";
358 buildInputs = with self; [];
358 buildInputs = with self; [];
359 doCheck = false;
359 doCheck = false;
360 propagatedBuildInputs = with self; [SQLAlchemy Mako python-editor];
360 propagatedBuildInputs = with self; [SQLAlchemy Mako python-editor];
361 src = fetchurl {
361 src = fetchurl {
362 url = "https://pypi.python.org/packages/ca/7e/299b4499b5c75e5a38c5845145ad24755bebfb8eec07a2e1c366b7181eeb/alembic-0.8.4.tar.gz";
362 url = "https://pypi.python.org/packages/ca/7e/299b4499b5c75e5a38c5845145ad24755bebfb8eec07a2e1c366b7181eeb/alembic-0.8.4.tar.gz";
363 md5 = "5f95d8ee62b443f9b37eb5bee76c582d";
363 md5 = "5f95d8ee62b443f9b37eb5bee76c582d";
364 };
364 };
365 meta = {
365 meta = {
366 license = [ pkgs.lib.licenses.mit ];
366 license = [ pkgs.lib.licenses.mit ];
367 };
367 };
368 };
368 };
369 amqplib = super.buildPythonPackage {
369 amqplib = super.buildPythonPackage {
370 name = "amqplib-1.0.2";
370 name = "amqplib-1.0.2";
371 buildInputs = with self; [];
371 buildInputs = with self; [];
372 doCheck = false;
372 doCheck = false;
373 propagatedBuildInputs = with self; [];
373 propagatedBuildInputs = with self; [];
374 src = fetchurl {
374 src = fetchurl {
375 url = "https://pypi.python.org/packages/75/b7/8c2429bf8d92354a0118614f9a4d15e53bc69ebedce534284111de5a0102/amqplib-1.0.2.tgz";
375 url = "https://pypi.python.org/packages/75/b7/8c2429bf8d92354a0118614f9a4d15e53bc69ebedce534284111de5a0102/amqplib-1.0.2.tgz";
376 md5 = "5c92f17fbedd99b2b4a836d4352d1e2f";
376 md5 = "5c92f17fbedd99b2b4a836d4352d1e2f";
377 };
377 };
378 meta = {
378 meta = {
379 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
379 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
380 };
380 };
381 };
381 };
382 anyjson = super.buildPythonPackage {
382 anyjson = super.buildPythonPackage {
383 name = "anyjson-0.3.3";
383 name = "anyjson-0.3.3";
384 buildInputs = with self; [];
384 buildInputs = with self; [];
385 doCheck = false;
385 doCheck = false;
386 propagatedBuildInputs = with self; [];
386 propagatedBuildInputs = with self; [];
387 src = fetchurl {
387 src = fetchurl {
388 url = "https://pypi.python.org/packages/c3/4d/d4089e1a3dd25b46bebdb55a992b0797cff657b4477bc32ce28038fdecbc/anyjson-0.3.3.tar.gz";
388 url = "https://pypi.python.org/packages/c3/4d/d4089e1a3dd25b46bebdb55a992b0797cff657b4477bc32ce28038fdecbc/anyjson-0.3.3.tar.gz";
389 md5 = "2ea28d6ec311aeeebaf993cb3008b27c";
389 md5 = "2ea28d6ec311aeeebaf993cb3008b27c";
390 };
390 };
391 meta = {
391 meta = {
392 license = [ pkgs.lib.licenses.bsdOriginal ];
392 license = [ pkgs.lib.licenses.bsdOriginal ];
393 };
393 };
394 };
394 };
395 appenlight-client = super.buildPythonPackage {
395 appenlight-client = super.buildPythonPackage {
396 name = "appenlight-client-0.6.14";
396 name = "appenlight-client-0.6.14";
397 buildInputs = with self; [];
397 buildInputs = with self; [];
398 doCheck = false;
398 doCheck = false;
399 propagatedBuildInputs = with self; [WebOb requests];
399 propagatedBuildInputs = with self; [WebOb requests];
400 src = fetchurl {
400 src = fetchurl {
401 url = "https://pypi.python.org/packages/4d/e0/23fee3ebada8143f707e65c06bcb82992040ee64ea8355e044ed55ebf0c1/appenlight_client-0.6.14.tar.gz";
401 url = "https://pypi.python.org/packages/4d/e0/23fee3ebada8143f707e65c06bcb82992040ee64ea8355e044ed55ebf0c1/appenlight_client-0.6.14.tar.gz";
402 md5 = "578c69b09f4356d898fff1199b98a95c";
402 md5 = "578c69b09f4356d898fff1199b98a95c";
403 };
403 };
404 meta = {
404 meta = {
405 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "DFSG approved"; } ];
405 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "DFSG approved"; } ];
406 };
406 };
407 };
407 };
408 authomatic = super.buildPythonPackage {
408 authomatic = super.buildPythonPackage {
409 name = "authomatic-0.1.0.post1";
409 name = "authomatic-0.1.0.post1";
410 buildInputs = with self; [];
410 buildInputs = with self; [];
411 doCheck = false;
411 doCheck = false;
412 propagatedBuildInputs = with self; [];
412 propagatedBuildInputs = with self; [];
413 src = fetchurl {
413 src = fetchurl {
414 url = "https://pypi.python.org/packages/08/1a/8a930461e604c2d5a7a871e1ac59fa82ccf994c32e807230c8d2fb07815a/Authomatic-0.1.0.post1.tar.gz";
414 url = "https://pypi.python.org/packages/08/1a/8a930461e604c2d5a7a871e1ac59fa82ccf994c32e807230c8d2fb07815a/Authomatic-0.1.0.post1.tar.gz";
415 md5 = "be3f3ce08747d776aae6d6cc8dcb49a9";
415 md5 = "be3f3ce08747d776aae6d6cc8dcb49a9";
416 };
416 };
417 meta = {
417 meta = {
418 license = [ pkgs.lib.licenses.mit ];
418 license = [ pkgs.lib.licenses.mit ];
419 };
419 };
420 };
420 };
421 backport-ipaddress = super.buildPythonPackage {
421 backport-ipaddress = super.buildPythonPackage {
422 name = "backport-ipaddress-0.1";
422 name = "backport-ipaddress-0.1";
423 buildInputs = with self; [];
423 buildInputs = with self; [];
424 doCheck = false;
424 doCheck = false;
425 propagatedBuildInputs = with self; [];
425 propagatedBuildInputs = with self; [];
426 src = fetchurl {
426 src = fetchurl {
427 url = "https://pypi.python.org/packages/d3/30/54c6dab05a4dec44db25ff309f1fbb6b7a8bde3f2bade38bb9da67bbab8f/backport_ipaddress-0.1.tar.gz";
427 url = "https://pypi.python.org/packages/d3/30/54c6dab05a4dec44db25ff309f1fbb6b7a8bde3f2bade38bb9da67bbab8f/backport_ipaddress-0.1.tar.gz";
428 md5 = "9c1f45f4361f71b124d7293a60006c05";
428 md5 = "9c1f45f4361f71b124d7293a60006c05";
429 };
429 };
430 meta = {
430 meta = {
431 license = [ pkgs.lib.licenses.psfl ];
431 license = [ pkgs.lib.licenses.psfl ];
432 };
432 };
433 };
433 };
434 backports.shutil-get-terminal-size = super.buildPythonPackage {
435 name = "backports.shutil-get-terminal-size-1.0.0";
436 buildInputs = with self; [];
437 doCheck = false;
438 propagatedBuildInputs = with self; [];
439 src = fetchurl {
440 url = "https://pypi.python.org/packages/ec/9c/368086faa9c016efce5da3e0e13ba392c9db79e3ab740b763fe28620b18b/backports.shutil_get_terminal_size-1.0.0.tar.gz";
441 md5 = "03267762480bd86b50580dc19dff3c66";
442 };
443 meta = {
444 license = [ pkgs.lib.licenses.mit ];
445 };
446 };
434 bottle = super.buildPythonPackage {
447 bottle = super.buildPythonPackage {
435 name = "bottle-0.12.8";
448 name = "bottle-0.12.8";
436 buildInputs = with self; [];
449 buildInputs = with self; [];
437 doCheck = false;
450 doCheck = false;
438 propagatedBuildInputs = with self; [];
451 propagatedBuildInputs = with self; [];
439 src = fetchurl {
452 src = fetchurl {
440 url = "https://pypi.python.org/packages/52/df/e4a408f3a7af396d186d4ecd3b389dd764f0f943b4fa8d257bfe7b49d343/bottle-0.12.8.tar.gz";
453 url = "https://pypi.python.org/packages/52/df/e4a408f3a7af396d186d4ecd3b389dd764f0f943b4fa8d257bfe7b49d343/bottle-0.12.8.tar.gz";
441 md5 = "13132c0a8f607bf860810a6ee9064c5b";
454 md5 = "13132c0a8f607bf860810a6ee9064c5b";
442 };
455 };
443 meta = {
456 meta = {
444 license = [ pkgs.lib.licenses.mit ];
457 license = [ pkgs.lib.licenses.mit ];
445 };
458 };
446 };
459 };
447 bumpversion = super.buildPythonPackage {
460 bumpversion = super.buildPythonPackage {
448 name = "bumpversion-0.5.3";
461 name = "bumpversion-0.5.3";
449 buildInputs = with self; [];
462 buildInputs = with self; [];
450 doCheck = false;
463 doCheck = false;
451 propagatedBuildInputs = with self; [];
464 propagatedBuildInputs = with self; [];
452 src = fetchurl {
465 src = fetchurl {
453 url = "https://pypi.python.org/packages/14/41/8c9da3549f8e00c84f0432c3a8cf8ed6898374714676aab91501d48760db/bumpversion-0.5.3.tar.gz";
466 url = "https://pypi.python.org/packages/14/41/8c9da3549f8e00c84f0432c3a8cf8ed6898374714676aab91501d48760db/bumpversion-0.5.3.tar.gz";
454 md5 = "c66a3492eafcf5ad4b024be9fca29820";
467 md5 = "c66a3492eafcf5ad4b024be9fca29820";
455 };
468 };
456 meta = {
469 meta = {
457 license = [ pkgs.lib.licenses.mit ];
470 license = [ pkgs.lib.licenses.mit ];
458 };
471 };
459 };
472 };
460 celery = super.buildPythonPackage {
473 celery = super.buildPythonPackage {
461 name = "celery-2.2.10";
474 name = "celery-2.2.10";
462 buildInputs = with self; [];
475 buildInputs = with self; [];
463 doCheck = false;
476 doCheck = false;
464 propagatedBuildInputs = with self; [python-dateutil anyjson kombu pyparsing];
477 propagatedBuildInputs = with self; [python-dateutil anyjson kombu pyparsing];
465 src = fetchurl {
478 src = fetchurl {
466 url = "https://pypi.python.org/packages/b1/64/860fd50e45844c83442e7953effcddeff66b2851d90b2d784f7201c111b8/celery-2.2.10.tar.gz";
479 url = "https://pypi.python.org/packages/b1/64/860fd50e45844c83442e7953effcddeff66b2851d90b2d784f7201c111b8/celery-2.2.10.tar.gz";
467 md5 = "898bc87e54f278055b561316ba73e222";
480 md5 = "898bc87e54f278055b561316ba73e222";
468 };
481 };
469 meta = {
482 meta = {
470 license = [ pkgs.lib.licenses.bsdOriginal ];
483 license = [ pkgs.lib.licenses.bsdOriginal ];
471 };
484 };
472 };
485 };
473 channelstream = super.buildPythonPackage {
486 channelstream = super.buildPythonPackage {
474 name = "channelstream-0.5.2";
487 name = "channelstream-0.5.2";
475 buildInputs = with self; [];
488 buildInputs = with self; [];
476 doCheck = false;
489 doCheck = false;
477 propagatedBuildInputs = with self; [gevent ws4py pyramid pyramid-jinja2 itsdangerous requests six];
490 propagatedBuildInputs = with self; [gevent ws4py pyramid pyramid-jinja2 itsdangerous requests six];
478 src = fetchurl {
491 src = fetchurl {
479 url = "https://pypi.python.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz";
492 url = "https://pypi.python.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz";
480 md5 = "1c5eb2a8a405be6f1073da94da6d81d3";
493 md5 = "1c5eb2a8a405be6f1073da94da6d81d3";
481 };
494 };
482 meta = {
495 meta = {
483 license = [ pkgs.lib.licenses.bsdOriginal ];
496 license = [ pkgs.lib.licenses.bsdOriginal ];
484 };
497 };
485 };
498 };
486 click = super.buildPythonPackage {
499 click = super.buildPythonPackage {
487 name = "click-5.1";
500 name = "click-5.1";
488 buildInputs = with self; [];
501 buildInputs = with self; [];
489 doCheck = false;
502 doCheck = false;
490 propagatedBuildInputs = with self; [];
503 propagatedBuildInputs = with self; [];
491 src = fetchurl {
504 src = fetchurl {
492 url = "https://pypi.python.org/packages/b7/34/a496632c4fb6c1ee76efedf77bb8d28b29363d839953d95095b12defe791/click-5.1.tar.gz";
505 url = "https://pypi.python.org/packages/b7/34/a496632c4fb6c1ee76efedf77bb8d28b29363d839953d95095b12defe791/click-5.1.tar.gz";
493 md5 = "9c5323008cccfe232a8b161fc8196d41";
506 md5 = "9c5323008cccfe232a8b161fc8196d41";
494 };
507 };
495 meta = {
508 meta = {
496 license = [ pkgs.lib.licenses.bsdOriginal ];
509 license = [ pkgs.lib.licenses.bsdOriginal ];
497 };
510 };
498 };
511 };
499 colander = super.buildPythonPackage {
512 colander = super.buildPythonPackage {
500 name = "colander-1.2";
513 name = "colander-1.2";
501 buildInputs = with self; [];
514 buildInputs = with self; [];
502 doCheck = false;
515 doCheck = false;
503 propagatedBuildInputs = with self; [translationstring iso8601];
516 propagatedBuildInputs = with self; [translationstring iso8601];
504 src = fetchurl {
517 src = fetchurl {
505 url = "https://pypi.python.org/packages/14/23/c9ceba07a6a1dc0eefbb215fc0dc64aabc2b22ee756bc0f0c13278fa0887/colander-1.2.tar.gz";
518 url = "https://pypi.python.org/packages/14/23/c9ceba07a6a1dc0eefbb215fc0dc64aabc2b22ee756bc0f0c13278fa0887/colander-1.2.tar.gz";
506 md5 = "83db21b07936a0726e588dae1914b9ed";
519 md5 = "83db21b07936a0726e588dae1914b9ed";
507 };
520 };
508 meta = {
521 meta = {
509 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
522 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
510 };
523 };
511 };
524 };
512 configobj = super.buildPythonPackage {
525 configobj = super.buildPythonPackage {
513 name = "configobj-5.0.6";
526 name = "configobj-5.0.6";
514 buildInputs = with self; [];
527 buildInputs = with self; [];
515 doCheck = false;
528 doCheck = false;
516 propagatedBuildInputs = with self; [six];
529 propagatedBuildInputs = with self; [six];
517 src = fetchurl {
530 src = fetchurl {
518 url = "https://pypi.python.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz";
531 url = "https://pypi.python.org/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz";
519 md5 = "e472a3a1c2a67bb0ec9b5d54c13a47d6";
532 md5 = "e472a3a1c2a67bb0ec9b5d54c13a47d6";
520 };
533 };
521 meta = {
534 meta = {
522 license = [ pkgs.lib.licenses.bsdOriginal ];
535 license = [ pkgs.lib.licenses.bsdOriginal ];
523 };
536 };
524 };
537 };
525 cov-core = super.buildPythonPackage {
538 cov-core = super.buildPythonPackage {
526 name = "cov-core-1.15.0";
539 name = "cov-core-1.15.0";
527 buildInputs = with self; [];
540 buildInputs = with self; [];
528 doCheck = false;
541 doCheck = false;
529 propagatedBuildInputs = with self; [coverage];
542 propagatedBuildInputs = with self; [coverage];
530 src = fetchurl {
543 src = fetchurl {
531 url = "https://pypi.python.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
544 url = "https://pypi.python.org/packages/4b/87/13e75a47b4ba1be06f29f6d807ca99638bedc6b57fa491cd3de891ca2923/cov-core-1.15.0.tar.gz";
532 md5 = "f519d4cb4c4e52856afb14af52919fe6";
545 md5 = "f519d4cb4c4e52856afb14af52919fe6";
533 };
546 };
534 meta = {
547 meta = {
535 license = [ pkgs.lib.licenses.mit ];
548 license = [ pkgs.lib.licenses.mit ];
536 };
549 };
537 };
550 };
538 coverage = super.buildPythonPackage {
551 coverage = super.buildPythonPackage {
539 name = "coverage-3.7.1";
552 name = "coverage-3.7.1";
540 buildInputs = with self; [];
553 buildInputs = with self; [];
541 doCheck = false;
554 doCheck = false;
542 propagatedBuildInputs = with self; [];
555 propagatedBuildInputs = with self; [];
543 src = fetchurl {
556 src = fetchurl {
544 url = "https://pypi.python.org/packages/09/4f/89b06c7fdc09687bca507dc411c342556ef9c5a3b26756137a4878ff19bf/coverage-3.7.1.tar.gz";
557 url = "https://pypi.python.org/packages/09/4f/89b06c7fdc09687bca507dc411c342556ef9c5a3b26756137a4878ff19bf/coverage-3.7.1.tar.gz";
545 md5 = "c47b36ceb17eaff3ecfab3bcd347d0df";
558 md5 = "c47b36ceb17eaff3ecfab3bcd347d0df";
546 };
559 };
547 meta = {
560 meta = {
548 license = [ pkgs.lib.licenses.bsdOriginal ];
561 license = [ pkgs.lib.licenses.bsdOriginal ];
549 };
562 };
550 };
563 };
551 cssselect = super.buildPythonPackage {
564 cssselect = super.buildPythonPackage {
552 name = "cssselect-0.9.1";
565 name = "cssselect-0.9.1";
553 buildInputs = with self; [];
566 buildInputs = with self; [];
554 doCheck = false;
567 doCheck = false;
555 propagatedBuildInputs = with self; [];
568 propagatedBuildInputs = with self; [];
556 src = fetchurl {
569 src = fetchurl {
557 url = "https://pypi.python.org/packages/aa/e5/9ee1460d485b94a6d55732eb7ad5b6c084caf73dd6f9cb0bb7d2a78fafe8/cssselect-0.9.1.tar.gz";
570 url = "https://pypi.python.org/packages/aa/e5/9ee1460d485b94a6d55732eb7ad5b6c084caf73dd6f9cb0bb7d2a78fafe8/cssselect-0.9.1.tar.gz";
558 md5 = "c74f45966277dc7a0f768b9b0f3522ac";
571 md5 = "c74f45966277dc7a0f768b9b0f3522ac";
559 };
572 };
560 meta = {
573 meta = {
561 license = [ pkgs.lib.licenses.bsdOriginal ];
574 license = [ pkgs.lib.licenses.bsdOriginal ];
562 };
575 };
563 };
576 };
564 decorator = super.buildPythonPackage {
577 decorator = super.buildPythonPackage {
565 name = "decorator-3.4.2";
578 name = "decorator-3.4.2";
566 buildInputs = with self; [];
579 buildInputs = with self; [];
567 doCheck = false;
580 doCheck = false;
568 propagatedBuildInputs = with self; [];
581 propagatedBuildInputs = with self; [];
569 src = fetchurl {
582 src = fetchurl {
570 url = "https://pypi.python.org/packages/35/3a/42566eb7a2cbac774399871af04e11d7ae3fc2579e7dae85213b8d1d1c57/decorator-3.4.2.tar.gz";
583 url = "https://pypi.python.org/packages/35/3a/42566eb7a2cbac774399871af04e11d7ae3fc2579e7dae85213b8d1d1c57/decorator-3.4.2.tar.gz";
571 md5 = "9e0536870d2b83ae27d58dbf22582f4d";
584 md5 = "9e0536870d2b83ae27d58dbf22582f4d";
572 };
585 };
573 meta = {
586 meta = {
574 license = [ pkgs.lib.licenses.bsdOriginal ];
587 license = [ pkgs.lib.licenses.bsdOriginal ];
575 };
588 };
576 };
589 };
577 deform = super.buildPythonPackage {
590 deform = super.buildPythonPackage {
578 name = "deform-2.0a2";
591 name = "deform-2.0a2";
579 buildInputs = with self; [];
592 buildInputs = with self; [];
580 doCheck = false;
593 doCheck = false;
581 propagatedBuildInputs = with self; [Chameleon colander peppercorn translationstring zope.deprecation];
594 propagatedBuildInputs = with self; [Chameleon colander peppercorn translationstring zope.deprecation];
582 src = fetchurl {
595 src = fetchurl {
583 url = "https://pypi.python.org/packages/8d/b3/aab57e81da974a806dc9c5fa024a6404720f890a6dcf2e80885e3cb4609a/deform-2.0a2.tar.gz";
596 url = "https://pypi.python.org/packages/8d/b3/aab57e81da974a806dc9c5fa024a6404720f890a6dcf2e80885e3cb4609a/deform-2.0a2.tar.gz";
584 md5 = "7a90d41f7fbc18002ce74f39bd90a5e4";
597 md5 = "7a90d41f7fbc18002ce74f39bd90a5e4";
585 };
598 };
586 meta = {
599 meta = {
587 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
600 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
588 };
601 };
589 };
602 };
590 docutils = super.buildPythonPackage {
603 docutils = super.buildPythonPackage {
591 name = "docutils-0.12";
604 name = "docutils-0.12";
592 buildInputs = with self; [];
605 buildInputs = with self; [];
593 doCheck = false;
606 doCheck = false;
594 propagatedBuildInputs = with self; [];
607 propagatedBuildInputs = with self; [];
595 src = fetchurl {
608 src = fetchurl {
596 url = "https://pypi.python.org/packages/37/38/ceda70135b9144d84884ae2fc5886c6baac4edea39550f28bcd144c1234d/docutils-0.12.tar.gz";
609 url = "https://pypi.python.org/packages/37/38/ceda70135b9144d84884ae2fc5886c6baac4edea39550f28bcd144c1234d/docutils-0.12.tar.gz";
597 md5 = "4622263b62c5c771c03502afa3157768";
610 md5 = "4622263b62c5c771c03502afa3157768";
598 };
611 };
599 meta = {
612 meta = {
600 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 ];
613 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 ];
601 };
614 };
602 };
615 };
603 dogpile.cache = super.buildPythonPackage {
616 dogpile.cache = super.buildPythonPackage {
604 name = "dogpile.cache-0.6.1";
617 name = "dogpile.cache-0.6.1";
605 buildInputs = with self; [];
618 buildInputs = with self; [];
606 doCheck = false;
619 doCheck = false;
607 propagatedBuildInputs = with self; [];
620 propagatedBuildInputs = with self; [];
608 src = fetchurl {
621 src = fetchurl {
609 url = "https://pypi.python.org/packages/f6/a0/6f2142c58c6588d17c734265b103ae1cd0741e1681dd9483a63f22033375/dogpile.cache-0.6.1.tar.gz";
622 url = "https://pypi.python.org/packages/f6/a0/6f2142c58c6588d17c734265b103ae1cd0741e1681dd9483a63f22033375/dogpile.cache-0.6.1.tar.gz";
610 md5 = "35d7fb30f22bbd0685763d894dd079a9";
623 md5 = "35d7fb30f22bbd0685763d894dd079a9";
611 };
624 };
612 meta = {
625 meta = {
613 license = [ pkgs.lib.licenses.bsdOriginal ];
626 license = [ pkgs.lib.licenses.bsdOriginal ];
614 };
627 };
615 };
628 };
616 dogpile.core = super.buildPythonPackage {
629 dogpile.core = super.buildPythonPackage {
617 name = "dogpile.core-0.4.1";
630 name = "dogpile.core-0.4.1";
618 buildInputs = with self; [];
631 buildInputs = with self; [];
619 doCheck = false;
632 doCheck = false;
620 propagatedBuildInputs = with self; [];
633 propagatedBuildInputs = with self; [];
621 src = fetchurl {
634 src = fetchurl {
622 url = "https://pypi.python.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
635 url = "https://pypi.python.org/packages/0e/77/e72abc04c22aedf874301861e5c1e761231c288b5de369c18be8f4b5c9bb/dogpile.core-0.4.1.tar.gz";
623 md5 = "01cb19f52bba3e95c9b560f39341f045";
636 md5 = "01cb19f52bba3e95c9b560f39341f045";
624 };
637 };
625 meta = {
638 meta = {
626 license = [ pkgs.lib.licenses.bsdOriginal ];
639 license = [ pkgs.lib.licenses.bsdOriginal ];
627 };
640 };
628 };
641 };
629 dulwich = super.buildPythonPackage {
642 dulwich = super.buildPythonPackage {
630 name = "dulwich-0.12.0";
643 name = "dulwich-0.12.0";
631 buildInputs = with self; [];
644 buildInputs = with self; [];
632 doCheck = false;
645 doCheck = false;
633 propagatedBuildInputs = with self; [];
646 propagatedBuildInputs = with self; [];
634 src = fetchurl {
647 src = fetchurl {
635 url = "https://pypi.python.org/packages/6f/04/fbe561b6d45c0ec758330d5b7f5ba4b6cb4f1ca1ab49859d2fc16320da75/dulwich-0.12.0.tar.gz";
648 url = "https://pypi.python.org/packages/6f/04/fbe561b6d45c0ec758330d5b7f5ba4b6cb4f1ca1ab49859d2fc16320da75/dulwich-0.12.0.tar.gz";
636 md5 = "f3a8a12bd9f9dd8c233e18f3d49436fa";
649 md5 = "f3a8a12bd9f9dd8c233e18f3d49436fa";
637 };
650 };
638 meta = {
651 meta = {
639 license = [ pkgs.lib.licenses.gpl2Plus ];
652 license = [ pkgs.lib.licenses.gpl2Plus ];
640 };
653 };
641 };
654 };
642 ecdsa = super.buildPythonPackage {
655 ecdsa = super.buildPythonPackage {
643 name = "ecdsa-0.11";
656 name = "ecdsa-0.11";
644 buildInputs = with self; [];
657 buildInputs = with self; [];
645 doCheck = false;
658 doCheck = false;
646 propagatedBuildInputs = with self; [];
659 propagatedBuildInputs = with self; [];
647 src = fetchurl {
660 src = fetchurl {
648 url = "https://pypi.python.org/packages/6c/3f/92fe5dcdcaa7bd117be21e5520c9a54375112b66ec000d209e9e9519fad1/ecdsa-0.11.tar.gz";
661 url = "https://pypi.python.org/packages/6c/3f/92fe5dcdcaa7bd117be21e5520c9a54375112b66ec000d209e9e9519fad1/ecdsa-0.11.tar.gz";
649 md5 = "8ef586fe4dbb156697d756900cb41d7c";
662 md5 = "8ef586fe4dbb156697d756900cb41d7c";
650 };
663 };
651 meta = {
664 meta = {
652 license = [ pkgs.lib.licenses.mit ];
665 license = [ pkgs.lib.licenses.mit ];
653 };
666 };
654 };
667 };
655 elasticsearch = super.buildPythonPackage {
668 elasticsearch = super.buildPythonPackage {
656 name = "elasticsearch-2.3.0";
669 name = "elasticsearch-2.3.0";
657 buildInputs = with self; [];
670 buildInputs = with self; [];
658 doCheck = false;
671 doCheck = false;
659 propagatedBuildInputs = with self; [urllib3];
672 propagatedBuildInputs = with self; [urllib3];
660 src = fetchurl {
673 src = fetchurl {
661 url = "https://pypi.python.org/packages/10/35/5fd52c5f0b0ee405ed4b5195e8bce44c5e041787680dc7b94b8071cac600/elasticsearch-2.3.0.tar.gz";
674 url = "https://pypi.python.org/packages/10/35/5fd52c5f0b0ee405ed4b5195e8bce44c5e041787680dc7b94b8071cac600/elasticsearch-2.3.0.tar.gz";
662 md5 = "2550f3b51629cf1ef9636608af92c340";
675 md5 = "2550f3b51629cf1ef9636608af92c340";
663 };
676 };
664 meta = {
677 meta = {
665 license = [ pkgs.lib.licenses.asl20 ];
678 license = [ pkgs.lib.licenses.asl20 ];
666 };
679 };
667 };
680 };
668 elasticsearch-dsl = super.buildPythonPackage {
681 elasticsearch-dsl = super.buildPythonPackage {
669 name = "elasticsearch-dsl-2.0.0";
682 name = "elasticsearch-dsl-2.0.0";
670 buildInputs = with self; [];
683 buildInputs = with self; [];
671 doCheck = false;
684 doCheck = false;
672 propagatedBuildInputs = with self; [six python-dateutil elasticsearch];
685 propagatedBuildInputs = with self; [six python-dateutil elasticsearch];
673 src = fetchurl {
686 src = fetchurl {
674 url = "https://pypi.python.org/packages/4e/5d/e788ae8dbe2ff4d13426db0a027533386a5c276c77a2654dc0e2007ce04a/elasticsearch-dsl-2.0.0.tar.gz";
687 url = "https://pypi.python.org/packages/4e/5d/e788ae8dbe2ff4d13426db0a027533386a5c276c77a2654dc0e2007ce04a/elasticsearch-dsl-2.0.0.tar.gz";
675 md5 = "4cdfec81bb35383dd3b7d02d7dc5ee68";
688 md5 = "4cdfec81bb35383dd3b7d02d7dc5ee68";
676 };
689 };
677 meta = {
690 meta = {
678 license = [ pkgs.lib.licenses.asl20 ];
691 license = [ pkgs.lib.licenses.asl20 ];
679 };
692 };
680 };
693 };
681 flake8 = super.buildPythonPackage {
694 enum34 = super.buildPythonPackage {
682 name = "flake8-2.4.1";
695 name = "enum34-1.1.6";
683 buildInputs = with self; [];
696 buildInputs = with self; [];
684 doCheck = false;
697 doCheck = false;
685 propagatedBuildInputs = with self; [pyflakes pep8 mccabe];
698 propagatedBuildInputs = with self; [];
686 src = fetchurl {
699 src = fetchurl {
687 url = "https://pypi.python.org/packages/8f/b5/9a73c66c7dba273bac8758398f060c008a25f3e84531063b42503b5d0a95/flake8-2.4.1.tar.gz";
700 url = "https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz";
688 md5 = "ed45d3db81a3b7c88bd63c6e37ca1d65";
701 md5 = "5f13a0841a61f7fc295c514490d120d0";
689 };
702 };
690 meta = {
703 meta = {
691 license = [ pkgs.lib.licenses.mit ];
704 license = [ pkgs.lib.licenses.bsdOriginal ];
692 };
705 };
693 };
706 };
694 future = super.buildPythonPackage {
707 future = super.buildPythonPackage {
695 name = "future-0.14.3";
708 name = "future-0.14.3";
696 buildInputs = with self; [];
709 buildInputs = with self; [];
697 doCheck = false;
710 doCheck = false;
698 propagatedBuildInputs = with self; [];
711 propagatedBuildInputs = with self; [];
699 src = fetchurl {
712 src = fetchurl {
700 url = "https://pypi.python.org/packages/83/80/8ef3a11a15f8eaafafa0937b20c1b3f73527e69ab6b3fa1cf94a5a96aabb/future-0.14.3.tar.gz";
713 url = "https://pypi.python.org/packages/83/80/8ef3a11a15f8eaafafa0937b20c1b3f73527e69ab6b3fa1cf94a5a96aabb/future-0.14.3.tar.gz";
701 md5 = "e94079b0bd1fc054929e8769fc0f6083";
714 md5 = "e94079b0bd1fc054929e8769fc0f6083";
702 };
715 };
703 meta = {
716 meta = {
704 license = [ { fullName = "OSI Approved"; } pkgs.lib.licenses.mit ];
717 license = [ { fullName = "OSI Approved"; } pkgs.lib.licenses.mit ];
705 };
718 };
706 };
719 };
707 futures = super.buildPythonPackage {
720 futures = super.buildPythonPackage {
708 name = "futures-3.0.2";
721 name = "futures-3.0.2";
709 buildInputs = with self; [];
722 buildInputs = with self; [];
710 doCheck = false;
723 doCheck = false;
711 propagatedBuildInputs = with self; [];
724 propagatedBuildInputs = with self; [];
712 src = fetchurl {
725 src = fetchurl {
713 url = "https://pypi.python.org/packages/f8/e7/fc0fcbeb9193ba2d4de00b065e7fd5aecd0679e93ce95a07322b2b1434f4/futures-3.0.2.tar.gz";
726 url = "https://pypi.python.org/packages/f8/e7/fc0fcbeb9193ba2d4de00b065e7fd5aecd0679e93ce95a07322b2b1434f4/futures-3.0.2.tar.gz";
714 md5 = "42aaf1e4de48d6e871d77dc1f9d96d5a";
727 md5 = "42aaf1e4de48d6e871d77dc1f9d96d5a";
715 };
728 };
716 meta = {
729 meta = {
717 license = [ pkgs.lib.licenses.bsdOriginal ];
730 license = [ pkgs.lib.licenses.bsdOriginal ];
718 };
731 };
719 };
732 };
720 gevent = super.buildPythonPackage {
733 gevent = super.buildPythonPackage {
721 name = "gevent-1.1.1";
734 name = "gevent-1.1.1";
722 buildInputs = with self; [];
735 buildInputs = with self; [];
723 doCheck = false;
736 doCheck = false;
724 propagatedBuildInputs = with self; [greenlet];
737 propagatedBuildInputs = with self; [greenlet];
725 src = fetchurl {
738 src = fetchurl {
726 url = "https://pypi.python.org/packages/12/dc/0b2e57823225de86f6e111a65d212c9e3b64847dddaa19691a6cb94b0b2e/gevent-1.1.1.tar.gz";
739 url = "https://pypi.python.org/packages/12/dc/0b2e57823225de86f6e111a65d212c9e3b64847dddaa19691a6cb94b0b2e/gevent-1.1.1.tar.gz";
727 md5 = "1532f5396ab4d07a231f1935483be7c3";
740 md5 = "1532f5396ab4d07a231f1935483be7c3";
728 };
741 };
729 meta = {
742 meta = {
730 license = [ pkgs.lib.licenses.mit ];
743 license = [ pkgs.lib.licenses.mit ];
731 };
744 };
732 };
745 };
733 gnureadline = super.buildPythonPackage {
746 gnureadline = super.buildPythonPackage {
734 name = "gnureadline-6.3.3";
747 name = "gnureadline-6.3.3";
735 buildInputs = with self; [];
748 buildInputs = with self; [];
736 doCheck = false;
749 doCheck = false;
737 propagatedBuildInputs = with self; [];
750 propagatedBuildInputs = with self; [];
738 src = fetchurl {
751 src = fetchurl {
739 url = "https://pypi.python.org/packages/3a/ee/2c3f568b0a74974791ac590ec742ef6133e2fbd287a074ba72a53fa5e97c/gnureadline-6.3.3.tar.gz";
752 url = "https://pypi.python.org/packages/3a/ee/2c3f568b0a74974791ac590ec742ef6133e2fbd287a074ba72a53fa5e97c/gnureadline-6.3.3.tar.gz";
740 md5 = "c4af83c9a3fbeac8f2da9b5a7c60e51c";
753 md5 = "c4af83c9a3fbeac8f2da9b5a7c60e51c";
741 };
754 };
742 meta = {
755 meta = {
743 license = [ pkgs.lib.licenses.gpl1 ];
756 license = [ pkgs.lib.licenses.gpl1 ];
744 };
757 };
745 };
758 };
746 gprof2dot = super.buildPythonPackage {
759 gprof2dot = super.buildPythonPackage {
747 name = "gprof2dot-2015.12.1";
760 name = "gprof2dot-2015.12.1";
748 buildInputs = with self; [];
761 buildInputs = with self; [];
749 doCheck = false;
762 doCheck = false;
750 propagatedBuildInputs = with self; [];
763 propagatedBuildInputs = with self; [];
751 src = fetchurl {
764 src = fetchurl {
752 url = "https://pypi.python.org/packages/b9/34/7bf93c1952d40fa5c95ad963f4d8344b61ef58558632402eca18e6c14127/gprof2dot-2015.12.1.tar.gz";
765 url = "https://pypi.python.org/packages/b9/34/7bf93c1952d40fa5c95ad963f4d8344b61ef58558632402eca18e6c14127/gprof2dot-2015.12.1.tar.gz";
753 md5 = "e23bf4e2f94db032750c193384b4165b";
766 md5 = "e23bf4e2f94db032750c193384b4165b";
754 };
767 };
755 meta = {
768 meta = {
756 license = [ { fullName = "LGPL"; } ];
769 license = [ { fullName = "LGPL"; } ];
757 };
770 };
758 };
771 };
759 greenlet = super.buildPythonPackage {
772 greenlet = super.buildPythonPackage {
760 name = "greenlet-0.4.9";
773 name = "greenlet-0.4.9";
761 buildInputs = with self; [];
774 buildInputs = with self; [];
762 doCheck = false;
775 doCheck = false;
763 propagatedBuildInputs = with self; [];
776 propagatedBuildInputs = with self; [];
764 src = fetchurl {
777 src = fetchurl {
765 url = "https://pypi.python.org/packages/4e/3d/9d421539b74e33608b245092870156b2e171fb49f2b51390aa4641eecb4a/greenlet-0.4.9.zip";
778 url = "https://pypi.python.org/packages/4e/3d/9d421539b74e33608b245092870156b2e171fb49f2b51390aa4641eecb4a/greenlet-0.4.9.zip";
766 md5 = "c6659cdb2a5e591723e629d2eef22e82";
779 md5 = "c6659cdb2a5e591723e629d2eef22e82";
767 };
780 };
768 meta = {
781 meta = {
769 license = [ pkgs.lib.licenses.mit ];
782 license = [ pkgs.lib.licenses.mit ];
770 };
783 };
771 };
784 };
772 gunicorn = super.buildPythonPackage {
785 gunicorn = super.buildPythonPackage {
773 name = "gunicorn-19.6.0";
786 name = "gunicorn-19.6.0";
774 buildInputs = with self; [];
787 buildInputs = with self; [];
775 doCheck = false;
788 doCheck = false;
776 propagatedBuildInputs = with self; [];
789 propagatedBuildInputs = with self; [];
777 src = fetchurl {
790 src = fetchurl {
778 url = "https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/gunicorn-19.6.0.tar.gz";
791 url = "https://pypi.python.org/packages/84/ce/7ea5396efad1cef682bbc4068e72a0276341d9d9d0f501da609fab9fcb80/gunicorn-19.6.0.tar.gz";
779 md5 = "338e5e8a83ea0f0625f768dba4597530";
792 md5 = "338e5e8a83ea0f0625f768dba4597530";
780 };
793 };
781 meta = {
794 meta = {
782 license = [ pkgs.lib.licenses.mit ];
795 license = [ pkgs.lib.licenses.mit ];
783 };
796 };
784 };
797 };
785 infrae.cache = super.buildPythonPackage {
798 infrae.cache = super.buildPythonPackage {
786 name = "infrae.cache-1.0.1";
799 name = "infrae.cache-1.0.1";
787 buildInputs = with self; [];
800 buildInputs = with self; [];
788 doCheck = false;
801 doCheck = false;
789 propagatedBuildInputs = with self; [Beaker repoze.lru];
802 propagatedBuildInputs = with self; [Beaker repoze.lru];
790 src = fetchurl {
803 src = fetchurl {
791 url = "https://pypi.python.org/packages/bb/f0/e7d5e984cf6592fd2807dc7bc44a93f9d18e04e6a61f87fdfb2622422d74/infrae.cache-1.0.1.tar.gz";
804 url = "https://pypi.python.org/packages/bb/f0/e7d5e984cf6592fd2807dc7bc44a93f9d18e04e6a61f87fdfb2622422d74/infrae.cache-1.0.1.tar.gz";
792 md5 = "b09076a766747e6ed2a755cc62088e32";
805 md5 = "b09076a766747e6ed2a755cc62088e32";
793 };
806 };
794 meta = {
807 meta = {
795 license = [ pkgs.lib.licenses.zpt21 ];
808 license = [ pkgs.lib.licenses.zpt21 ];
796 };
809 };
797 };
810 };
798 invoke = super.buildPythonPackage {
811 invoke = super.buildPythonPackage {
799 name = "invoke-0.13.0";
812 name = "invoke-0.13.0";
800 buildInputs = with self; [];
813 buildInputs = with self; [];
801 doCheck = false;
814 doCheck = false;
802 propagatedBuildInputs = with self; [];
815 propagatedBuildInputs = with self; [];
803 src = fetchurl {
816 src = fetchurl {
804 url = "https://pypi.python.org/packages/47/bf/d07ef52fa1ac645468858bbac7cb95b246a972a045e821493d17d89c81be/invoke-0.13.0.tar.gz";
817 url = "https://pypi.python.org/packages/47/bf/d07ef52fa1ac645468858bbac7cb95b246a972a045e821493d17d89c81be/invoke-0.13.0.tar.gz";
805 md5 = "c0d1ed4bfb34eaab551662d8cfee6540";
818 md5 = "c0d1ed4bfb34eaab551662d8cfee6540";
806 };
819 };
807 meta = {
820 meta = {
808 license = [ pkgs.lib.licenses.bsdOriginal ];
821 license = [ pkgs.lib.licenses.bsdOriginal ];
809 };
822 };
810 };
823 };
811 ipdb = super.buildPythonPackage {
824 ipdb = super.buildPythonPackage {
812 name = "ipdb-0.8";
825 name = "ipdb-0.10.1";
813 buildInputs = with self; [];
826 buildInputs = with self; [];
814 doCheck = false;
827 doCheck = false;
815 propagatedBuildInputs = with self; [ipython];
828 propagatedBuildInputs = with self; [ipython setuptools];
816 src = fetchurl {
829 src = fetchurl {
817 url = "https://pypi.python.org/packages/f0/25/d7dd430ced6cd8dc242a933c8682b5dbf32eb4011d82f87e34209e5ec845/ipdb-0.8.zip";
830 url = "https://pypi.python.org/packages/eb/0a/0a37dc19572580336ad3813792c0d18c8d7117c2d66fc63c501f13a7a8f8/ipdb-0.10.1.tar.gz";
818 md5 = "96dca0712efa01aa5eaf6b22071dd3ed";
831 md5 = "4aeab65f633ddc98ebdb5eebf08dc713";
819 };
832 };
820 meta = {
833 meta = {
821 license = [ pkgs.lib.licenses.gpl1 ];
834 license = [ pkgs.lib.licenses.bsdOriginal ];
822 };
835 };
823 };
836 };
824 ipython = super.buildPythonPackage {
837 ipython = super.buildPythonPackage {
825 name = "ipython-3.1.0";
838 name = "ipython-5.1.0";
839 buildInputs = with self; [];
840 doCheck = false;
841 propagatedBuildInputs = with self; [setuptools decorator pickleshare simplegeneric traitlets prompt-toolkit Pygments pexpect backports.shutil-get-terminal-size pathlib2 pexpect];
842 src = fetchurl {
843 url = "https://pypi.python.org/packages/89/63/a9292f7cd9d0090a0f995e1167f3f17d5889dcbc9a175261719c513b9848/ipython-5.1.0.tar.gz";
844 md5 = "47c8122420f65b58784cb4b9b4af35e3";
845 };
846 meta = {
847 license = [ pkgs.lib.licenses.bsdOriginal ];
848 };
849 };
850 ipython-genutils = super.buildPythonPackage {
851 name = "ipython-genutils-0.1.0";
826 buildInputs = with self; [];
852 buildInputs = with self; [];
827 doCheck = false;
853 doCheck = false;
828 propagatedBuildInputs = with self; [];
854 propagatedBuildInputs = with self; [];
829 src = fetchurl {
855 src = fetchurl {
830 url = "https://pypi.python.org/packages/06/91/120c0835254c120af89f066afaabf81289bc2726c1fc3ca0555df6882f58/ipython-3.1.0.tar.gz";
856 url = "https://pypi.python.org/packages/71/b7/a64c71578521606edbbce15151358598f3dfb72a3431763edc2baf19e71f/ipython_genutils-0.1.0.tar.gz";
831 md5 = "a749d90c16068687b0ec45a27e72ef8f";
857 md5 = "9a8afbe0978adbcbfcb3b35b2d015a56";
832 };
858 };
833 meta = {
859 meta = {
834 license = [ pkgs.lib.licenses.bsdOriginal ];
860 license = [ pkgs.lib.licenses.bsdOriginal ];
835 };
861 };
836 };
862 };
837 iso8601 = super.buildPythonPackage {
863 iso8601 = super.buildPythonPackage {
838 name = "iso8601-0.1.11";
864 name = "iso8601-0.1.11";
839 buildInputs = with self; [];
865 buildInputs = with self; [];
840 doCheck = false;
866 doCheck = false;
841 propagatedBuildInputs = with self; [];
867 propagatedBuildInputs = with self; [];
842 src = fetchurl {
868 src = fetchurl {
843 url = "https://pypi.python.org/packages/c0/75/c9209ee4d1b5975eb8c2cba4428bde6b61bd55664a98290dd015cdb18e98/iso8601-0.1.11.tar.gz";
869 url = "https://pypi.python.org/packages/c0/75/c9209ee4d1b5975eb8c2cba4428bde6b61bd55664a98290dd015cdb18e98/iso8601-0.1.11.tar.gz";
844 md5 = "b06d11cd14a64096f907086044f0fe38";
870 md5 = "b06d11cd14a64096f907086044f0fe38";
845 };
871 };
846 meta = {
872 meta = {
847 license = [ pkgs.lib.licenses.mit ];
873 license = [ pkgs.lib.licenses.mit ];
848 };
874 };
849 };
875 };
850 itsdangerous = super.buildPythonPackage {
876 itsdangerous = super.buildPythonPackage {
851 name = "itsdangerous-0.24";
877 name = "itsdangerous-0.24";
852 buildInputs = with self; [];
878 buildInputs = with self; [];
853 doCheck = false;
879 doCheck = false;
854 propagatedBuildInputs = with self; [];
880 propagatedBuildInputs = with self; [];
855 src = fetchurl {
881 src = fetchurl {
856 url = "https://pypi.python.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz";
882 url = "https://pypi.python.org/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz";
857 md5 = "a3d55aa79369aef5345c036a8a26307f";
883 md5 = "a3d55aa79369aef5345c036a8a26307f";
858 };
884 };
859 meta = {
885 meta = {
860 license = [ pkgs.lib.licenses.bsdOriginal ];
886 license = [ pkgs.lib.licenses.bsdOriginal ];
861 };
887 };
862 };
888 };
863 kombu = super.buildPythonPackage {
889 kombu = super.buildPythonPackage {
864 name = "kombu-1.5.1";
890 name = "kombu-1.5.1";
865 buildInputs = with self; [];
891 buildInputs = with self; [];
866 doCheck = false;
892 doCheck = false;
867 propagatedBuildInputs = with self; [anyjson amqplib];
893 propagatedBuildInputs = with self; [anyjson amqplib];
868 src = fetchurl {
894 src = fetchurl {
869 url = "https://pypi.python.org/packages/19/53/74bf2a624644b45f0850a638752514fc10a8e1cbd738f10804951a6df3f5/kombu-1.5.1.tar.gz";
895 url = "https://pypi.python.org/packages/19/53/74bf2a624644b45f0850a638752514fc10a8e1cbd738f10804951a6df3f5/kombu-1.5.1.tar.gz";
870 md5 = "50662f3c7e9395b3d0721fb75d100b63";
896 md5 = "50662f3c7e9395b3d0721fb75d100b63";
871 };
897 };
872 meta = {
898 meta = {
873 license = [ pkgs.lib.licenses.bsdOriginal ];
899 license = [ pkgs.lib.licenses.bsdOriginal ];
874 };
900 };
875 };
901 };
876 lxml = super.buildPythonPackage {
902 lxml = super.buildPythonPackage {
877 name = "lxml-3.4.4";
903 name = "lxml-3.4.4";
878 buildInputs = with self; [];
904 buildInputs = with self; [];
879 doCheck = false;
905 doCheck = false;
880 propagatedBuildInputs = with self; [];
906 propagatedBuildInputs = with self; [];
881 src = fetchurl {
907 src = fetchurl {
882 url = "https://pypi.python.org/packages/63/c7/4f2a2a4ad6c6fa99b14be6b3c1cece9142e2d915aa7c43c908677afc8fa4/lxml-3.4.4.tar.gz";
908 url = "https://pypi.python.org/packages/63/c7/4f2a2a4ad6c6fa99b14be6b3c1cece9142e2d915aa7c43c908677afc8fa4/lxml-3.4.4.tar.gz";
883 md5 = "a9a65972afc173ec7a39c585f4eea69c";
909 md5 = "a9a65972afc173ec7a39c585f4eea69c";
884 };
910 };
885 meta = {
911 meta = {
886 license = [ pkgs.lib.licenses.bsdOriginal ];
912 license = [ pkgs.lib.licenses.bsdOriginal ];
887 };
913 };
888 };
914 };
889 mccabe = super.buildPythonPackage {
890 name = "mccabe-0.3";
891 buildInputs = with self; [];
892 doCheck = false;
893 propagatedBuildInputs = with self; [];
894 src = fetchurl {
895 url = "https://pypi.python.org/packages/c9/2e/75231479e11a906b64ac43bad9d0bb534d00080b18bdca8db9da46e1faf7/mccabe-0.3.tar.gz";
896 md5 = "81640948ff226f8c12b3277059489157";
897 };
898 meta = {
899 license = [ { fullName = "Expat license"; } pkgs.lib.licenses.mit ];
900 };
901 };
902 meld3 = super.buildPythonPackage {
915 meld3 = super.buildPythonPackage {
903 name = "meld3-1.0.2";
916 name = "meld3-1.0.2";
904 buildInputs = with self; [];
917 buildInputs = with self; [];
905 doCheck = false;
918 doCheck = false;
906 propagatedBuildInputs = with self; [];
919 propagatedBuildInputs = with self; [];
907 src = fetchurl {
920 src = fetchurl {
908 url = "https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz";
921 url = "https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz";
909 md5 = "3ccc78cd79cffd63a751ad7684c02c91";
922 md5 = "3ccc78cd79cffd63a751ad7684c02c91";
910 };
923 };
911 meta = {
924 meta = {
912 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
925 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
913 };
926 };
914 };
927 };
915 mock = super.buildPythonPackage {
928 mock = super.buildPythonPackage {
916 name = "mock-1.0.1";
929 name = "mock-1.0.1";
917 buildInputs = with self; [];
930 buildInputs = with self; [];
918 doCheck = false;
931 doCheck = false;
919 propagatedBuildInputs = with self; [];
932 propagatedBuildInputs = with self; [];
920 src = fetchurl {
933 src = fetchurl {
921 url = "https://pypi.python.org/packages/15/45/30273ee91feb60dabb8fbb2da7868520525f02cf910279b3047182feed80/mock-1.0.1.zip";
934 url = "https://pypi.python.org/packages/15/45/30273ee91feb60dabb8fbb2da7868520525f02cf910279b3047182feed80/mock-1.0.1.zip";
922 md5 = "869f08d003c289a97c1a6610faf5e913";
935 md5 = "869f08d003c289a97c1a6610faf5e913";
923 };
936 };
924 meta = {
937 meta = {
925 license = [ pkgs.lib.licenses.bsdOriginal ];
938 license = [ pkgs.lib.licenses.bsdOriginal ];
926 };
939 };
927 };
940 };
928 msgpack-python = super.buildPythonPackage {
941 msgpack-python = super.buildPythonPackage {
929 name = "msgpack-python-0.4.6";
942 name = "msgpack-python-0.4.6";
930 buildInputs = with self; [];
943 buildInputs = with self; [];
931 doCheck = false;
944 doCheck = false;
932 propagatedBuildInputs = with self; [];
945 propagatedBuildInputs = with self; [];
933 src = fetchurl {
946 src = fetchurl {
934 url = "https://pypi.python.org/packages/15/ce/ff2840885789ef8035f66cd506ea05bdb228340307d5e71a7b1e3f82224c/msgpack-python-0.4.6.tar.gz";
947 url = "https://pypi.python.org/packages/15/ce/ff2840885789ef8035f66cd506ea05bdb228340307d5e71a7b1e3f82224c/msgpack-python-0.4.6.tar.gz";
935 md5 = "8b317669314cf1bc881716cccdaccb30";
948 md5 = "8b317669314cf1bc881716cccdaccb30";
936 };
949 };
937 meta = {
950 meta = {
938 license = [ pkgs.lib.licenses.asl20 ];
951 license = [ pkgs.lib.licenses.asl20 ];
939 };
952 };
940 };
953 };
941 nose = super.buildPythonPackage {
954 nose = super.buildPythonPackage {
942 name = "nose-1.3.6";
955 name = "nose-1.3.6";
943 buildInputs = with self; [];
956 buildInputs = with self; [];
944 doCheck = false;
957 doCheck = false;
945 propagatedBuildInputs = with self; [];
958 propagatedBuildInputs = with self; [];
946 src = fetchurl {
959 src = fetchurl {
947 url = "https://pypi.python.org/packages/70/c7/469e68148d17a0d3db5ed49150242fd70a74a8147b8f3f8b87776e028d99/nose-1.3.6.tar.gz";
960 url = "https://pypi.python.org/packages/70/c7/469e68148d17a0d3db5ed49150242fd70a74a8147b8f3f8b87776e028d99/nose-1.3.6.tar.gz";
948 md5 = "0ca546d81ca8309080fc80cb389e7a16";
961 md5 = "0ca546d81ca8309080fc80cb389e7a16";
949 };
962 };
950 meta = {
963 meta = {
951 license = [ { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "GNU LGPL"; } ];
964 license = [ { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "GNU LGPL"; } ];
952 };
965 };
953 };
966 };
954 objgraph = super.buildPythonPackage {
967 objgraph = super.buildPythonPackage {
955 name = "objgraph-2.0.0";
968 name = "objgraph-2.0.0";
956 buildInputs = with self; [];
969 buildInputs = with self; [];
957 doCheck = false;
970 doCheck = false;
958 propagatedBuildInputs = with self; [];
971 propagatedBuildInputs = with self; [];
959 src = fetchurl {
972 src = fetchurl {
960 url = "https://pypi.python.org/packages/d7/33/ace750b59247496ed769b170586c5def7202683f3d98e737b75b767ff29e/objgraph-2.0.0.tar.gz";
973 url = "https://pypi.python.org/packages/d7/33/ace750b59247496ed769b170586c5def7202683f3d98e737b75b767ff29e/objgraph-2.0.0.tar.gz";
961 md5 = "25b0d5e5adc74aa63ead15699614159c";
974 md5 = "25b0d5e5adc74aa63ead15699614159c";
962 };
975 };
963 meta = {
976 meta = {
964 license = [ pkgs.lib.licenses.mit ];
977 license = [ pkgs.lib.licenses.mit ];
965 };
978 };
966 };
979 };
967 packaging = super.buildPythonPackage {
980 packaging = super.buildPythonPackage {
968 name = "packaging-15.2";
981 name = "packaging-15.2";
969 buildInputs = with self; [];
982 buildInputs = with self; [];
970 doCheck = false;
983 doCheck = false;
971 propagatedBuildInputs = with self; [];
984 propagatedBuildInputs = with self; [];
972 src = fetchurl {
985 src = fetchurl {
973 url = "https://pypi.python.org/packages/24/c4/185da1304f07047dc9e0c46c31db75c0351bd73458ac3efad7da3dbcfbe1/packaging-15.2.tar.gz";
986 url = "https://pypi.python.org/packages/24/c4/185da1304f07047dc9e0c46c31db75c0351bd73458ac3efad7da3dbcfbe1/packaging-15.2.tar.gz";
974 md5 = "c16093476f6ced42128bf610e5db3784";
987 md5 = "c16093476f6ced42128bf610e5db3784";
975 };
988 };
976 meta = {
989 meta = {
977 license = [ pkgs.lib.licenses.asl20 ];
990 license = [ pkgs.lib.licenses.asl20 ];
978 };
991 };
979 };
992 };
980 paramiko = super.buildPythonPackage {
993 paramiko = super.buildPythonPackage {
981 name = "paramiko-1.15.1";
994 name = "paramiko-1.15.1";
982 buildInputs = with self; [];
995 buildInputs = with self; [];
983 doCheck = false;
996 doCheck = false;
984 propagatedBuildInputs = with self; [pycrypto ecdsa];
997 propagatedBuildInputs = with self; [pycrypto ecdsa];
985 src = fetchurl {
998 src = fetchurl {
986 url = "https://pypi.python.org/packages/04/2b/a22d2a560c1951abbbf95a0628e245945565f70dc082d9e784666887222c/paramiko-1.15.1.tar.gz";
999 url = "https://pypi.python.org/packages/04/2b/a22d2a560c1951abbbf95a0628e245945565f70dc082d9e784666887222c/paramiko-1.15.1.tar.gz";
987 md5 = "48c274c3f9b1282932567b21f6acf3b5";
1000 md5 = "48c274c3f9b1282932567b21f6acf3b5";
988 };
1001 };
989 meta = {
1002 meta = {
990 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1003 license = [ { fullName = "LGPL"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
991 };
1004 };
992 };
1005 };
993 pep8 = super.buildPythonPackage {
1006 pathlib2 = super.buildPythonPackage {
994 name = "pep8-1.5.7";
1007 name = "pathlib2-2.1.0";
995 buildInputs = with self; [];
1008 buildInputs = with self; [];
996 doCheck = false;
1009 doCheck = false;
997 propagatedBuildInputs = with self; [];
1010 propagatedBuildInputs = with self; [six];
998 src = fetchurl {
1011 src = fetchurl {
999 url = "https://pypi.python.org/packages/8b/de/259f5e735897ada1683489dd514b2a1c91aaa74e5e6b68f80acf128a6368/pep8-1.5.7.tar.gz";
1012 url = "https://pypi.python.org/packages/c9/27/8448b10d8440c08efeff0794adf7d0ed27adb98372c70c7b38f3947d4749/pathlib2-2.1.0.tar.gz";
1000 md5 = "f6adbdd69365ecca20513c709f9b7c93";
1013 md5 = "38e4f58b4d69dfcb9edb49a54a8b28d2";
1001 };
1014 };
1002 meta = {
1015 meta = {
1003 license = [ { fullName = "Expat license"; } pkgs.lib.licenses.mit ];
1016 license = [ pkgs.lib.licenses.mit ];
1004 };
1017 };
1005 };
1018 };
1006 peppercorn = super.buildPythonPackage {
1019 peppercorn = super.buildPythonPackage {
1007 name = "peppercorn-0.5";
1020 name = "peppercorn-0.5";
1008 buildInputs = with self; [];
1021 buildInputs = with self; [];
1009 doCheck = false;
1022 doCheck = false;
1010 propagatedBuildInputs = with self; [];
1023 propagatedBuildInputs = with self; [];
1011 src = fetchurl {
1024 src = fetchurl {
1012 url = "https://pypi.python.org/packages/45/ec/a62ec317d1324a01567c5221b420742f094f05ee48097e5157d32be3755c/peppercorn-0.5.tar.gz";
1025 url = "https://pypi.python.org/packages/45/ec/a62ec317d1324a01567c5221b420742f094f05ee48097e5157d32be3755c/peppercorn-0.5.tar.gz";
1013 md5 = "f08efbca5790019ab45d76b7244abd40";
1026 md5 = "f08efbca5790019ab45d76b7244abd40";
1014 };
1027 };
1015 meta = {
1028 meta = {
1016 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1029 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1017 };
1030 };
1018 };
1031 };
1032 pexpect = super.buildPythonPackage {
1033 name = "pexpect-4.2.1";
1034 buildInputs = with self; [];
1035 doCheck = false;
1036 propagatedBuildInputs = with self; [ptyprocess];
1037 src = fetchurl {
1038 url = "https://pypi.python.org/packages/e8/13/d0b0599099d6cd23663043a2a0bb7c61e58c6ba359b2656e6fb000ef5b98/pexpect-4.2.1.tar.gz";
1039 md5 = "3694410001a99dff83f0b500a1ca1c95";
1040 };
1041 meta = {
1042 license = [ pkgs.lib.licenses.isc { fullName = "ISC License (ISCL)"; } ];
1043 };
1044 };
1045 pickleshare = super.buildPythonPackage {
1046 name = "pickleshare-0.7.4";
1047 buildInputs = with self; [];
1048 doCheck = false;
1049 propagatedBuildInputs = with self; [pathlib2];
1050 src = fetchurl {
1051 url = "https://pypi.python.org/packages/69/fe/dd137d84daa0fd13a709e448138e310d9ea93070620c9db5454e234af525/pickleshare-0.7.4.tar.gz";
1052 md5 = "6a9e5dd8dfc023031f6b7b3f824cab12";
1053 };
1054 meta = {
1055 license = [ pkgs.lib.licenses.mit ];
1056 };
1057 };
1058 prompt-toolkit = super.buildPythonPackage {
1059 name = "prompt-toolkit-1.0.9";
1060 buildInputs = with self; [];
1061 doCheck = false;
1062 propagatedBuildInputs = with self; [six wcwidth];
1063 src = fetchurl {
1064 url = "https://pypi.python.org/packages/83/14/5ac258da6c530eca02852ee25c7a9ff3ca78287bb4c198d0d0055845d856/prompt_toolkit-1.0.9.tar.gz";
1065 md5 = "a39f91a54308fb7446b1a421c11f227c";
1066 };
1067 meta = {
1068 license = [ pkgs.lib.licenses.bsdOriginal ];
1069 };
1070 };
1019 psutil = super.buildPythonPackage {
1071 psutil = super.buildPythonPackage {
1020 name = "psutil-2.2.1";
1072 name = "psutil-4.3.1";
1021 buildInputs = with self; [];
1073 buildInputs = with self; [];
1022 doCheck = false;
1074 doCheck = false;
1023 propagatedBuildInputs = with self; [];
1075 propagatedBuildInputs = with self; [];
1024 src = fetchurl {
1076 src = fetchurl {
1025 url = "https://pypi.python.org/packages/df/47/ee54ef14dd40f8ce831a7581001a5096494dc99fe71586260ca6b531fe86/psutil-2.2.1.tar.gz";
1077 url = "https://pypi.python.org/packages/78/cc/f267a1371f229bf16db6a4e604428c3b032b823b83155bd33cef45e49a53/psutil-4.3.1.tar.gz";
1026 md5 = "1a2b58cd9e3a53528bb6148f0c4d5244";
1078 md5 = "199a366dba829c88bddaf5b41d19ddc0";
1027 };
1079 };
1028 meta = {
1080 meta = {
1029 license = [ pkgs.lib.licenses.bsdOriginal ];
1081 license = [ pkgs.lib.licenses.bsdOriginal ];
1030 };
1082 };
1031 };
1083 };
1032 psycopg2 = super.buildPythonPackage {
1084 psycopg2 = super.buildPythonPackage {
1033 name = "psycopg2-2.6.1";
1085 name = "psycopg2-2.6.1";
1034 buildInputs = with self; [];
1086 buildInputs = with self; [];
1035 doCheck = false;
1087 doCheck = false;
1036 propagatedBuildInputs = with self; [];
1088 propagatedBuildInputs = with self; [];
1037 src = fetchurl {
1089 src = fetchurl {
1038 url = "https://pypi.python.org/packages/86/fd/cc8315be63a41fe000cce20482a917e874cdc1151e62cb0141f5e55f711e/psycopg2-2.6.1.tar.gz";
1090 url = "https://pypi.python.org/packages/86/fd/cc8315be63a41fe000cce20482a917e874cdc1151e62cb0141f5e55f711e/psycopg2-2.6.1.tar.gz";
1039 md5 = "842b44f8c95517ed5b792081a2370da1";
1091 md5 = "842b44f8c95517ed5b792081a2370da1";
1040 };
1092 };
1041 meta = {
1093 meta = {
1042 license = [ pkgs.lib.licenses.zpt21 { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL with exceptions or ZPL"; } ];
1094 license = [ pkgs.lib.licenses.zpt21 { fullName = "GNU Library or Lesser General Public License (LGPL)"; } { fullName = "LGPL with exceptions or ZPL"; } ];
1043 };
1095 };
1044 };
1096 };
1097 ptyprocess = super.buildPythonPackage {
1098 name = "ptyprocess-0.5.1";
1099 buildInputs = with self; [];
1100 doCheck = false;
1101 propagatedBuildInputs = with self; [];
1102 src = fetchurl {
1103 url = "https://pypi.python.org/packages/db/d7/b465161910f3d1cef593c5e002bff67e0384898f597f1a7fdc8db4c02bf6/ptyprocess-0.5.1.tar.gz";
1104 md5 = "94e537122914cc9ec9c1eadcd36e73a1";
1105 };
1106 meta = {
1107 license = [ ];
1108 };
1109 };
1045 py = super.buildPythonPackage {
1110 py = super.buildPythonPackage {
1046 name = "py-1.4.29";
1111 name = "py-1.4.29";
1047 buildInputs = with self; [];
1112 buildInputs = with self; [];
1048 doCheck = false;
1113 doCheck = false;
1049 propagatedBuildInputs = with self; [];
1114 propagatedBuildInputs = with self; [];
1050 src = fetchurl {
1115 src = fetchurl {
1051 url = "https://pypi.python.org/packages/2a/bc/a1a4a332ac10069b8e5e25136a35e08a03f01fd6ab03d819889d79a1fd65/py-1.4.29.tar.gz";
1116 url = "https://pypi.python.org/packages/2a/bc/a1a4a332ac10069b8e5e25136a35e08a03f01fd6ab03d819889d79a1fd65/py-1.4.29.tar.gz";
1052 md5 = "c28e0accba523a29b35a48bb703fb96c";
1117 md5 = "c28e0accba523a29b35a48bb703fb96c";
1053 };
1118 };
1054 meta = {
1119 meta = {
1055 license = [ pkgs.lib.licenses.mit ];
1120 license = [ pkgs.lib.licenses.mit ];
1056 };
1121 };
1057 };
1122 };
1058 py-bcrypt = super.buildPythonPackage {
1123 py-bcrypt = super.buildPythonPackage {
1059 name = "py-bcrypt-0.4";
1124 name = "py-bcrypt-0.4";
1060 buildInputs = with self; [];
1125 buildInputs = with self; [];
1061 doCheck = false;
1126 doCheck = false;
1062 propagatedBuildInputs = with self; [];
1127 propagatedBuildInputs = with self; [];
1063 src = fetchurl {
1128 src = fetchurl {
1064 url = "https://pypi.python.org/packages/68/b1/1c3068c5c4d2e35c48b38dcc865301ebfdf45f54507086ac65ced1fd3b3d/py-bcrypt-0.4.tar.gz";
1129 url = "https://pypi.python.org/packages/68/b1/1c3068c5c4d2e35c48b38dcc865301ebfdf45f54507086ac65ced1fd3b3d/py-bcrypt-0.4.tar.gz";
1065 md5 = "dd8b367d6b716a2ea2e72392525f4e36";
1130 md5 = "dd8b367d6b716a2ea2e72392525f4e36";
1066 };
1131 };
1067 meta = {
1132 meta = {
1068 license = [ pkgs.lib.licenses.bsdOriginal ];
1133 license = [ pkgs.lib.licenses.bsdOriginal ];
1069 };
1134 };
1070 };
1135 };
1071 py-gfm = super.buildPythonPackage {
1136 py-gfm = super.buildPythonPackage {
1072 name = "py-gfm-0.1.3";
1137 name = "py-gfm-0.1.3";
1073 buildInputs = with self; [];
1138 buildInputs = with self; [];
1074 doCheck = false;
1139 doCheck = false;
1075 propagatedBuildInputs = with self; [setuptools Markdown];
1140 propagatedBuildInputs = with self; [setuptools Markdown];
1076 src = fetchurl {
1141 src = fetchurl {
1077 url = "https://pypi.python.org/packages/12/e4/6b3d8678da04f97d7490d8264d8de51c2dc9fb91209ccee9c515c95e14c5/py-gfm-0.1.3.tar.gz";
1142 url = "https://pypi.python.org/packages/12/e4/6b3d8678da04f97d7490d8264d8de51c2dc9fb91209ccee9c515c95e14c5/py-gfm-0.1.3.tar.gz";
1078 md5 = "e588d9e69640a241b97e2c59c22527a6";
1143 md5 = "e588d9e69640a241b97e2c59c22527a6";
1079 };
1144 };
1080 meta = {
1145 meta = {
1081 license = [ pkgs.lib.licenses.bsdOriginal ];
1146 license = [ pkgs.lib.licenses.bsdOriginal ];
1082 };
1147 };
1083 };
1148 };
1084 pycrypto = super.buildPythonPackage {
1149 pycrypto = super.buildPythonPackage {
1085 name = "pycrypto-2.6.1";
1150 name = "pycrypto-2.6.1";
1086 buildInputs = with self; [];
1151 buildInputs = with self; [];
1087 doCheck = false;
1152 doCheck = false;
1088 propagatedBuildInputs = with self; [];
1153 propagatedBuildInputs = with self; [];
1089 src = fetchurl {
1154 src = fetchurl {
1090 url = "https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz";
1155 url = "https://pypi.python.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz";
1091 md5 = "55a61a054aa66812daf5161a0d5d7eda";
1156 md5 = "55a61a054aa66812daf5161a0d5d7eda";
1092 };
1157 };
1093 meta = {
1158 meta = {
1094 license = [ pkgs.lib.licenses.publicDomain ];
1159 license = [ pkgs.lib.licenses.publicDomain ];
1095 };
1160 };
1096 };
1161 };
1097 pycurl = super.buildPythonPackage {
1162 pycurl = super.buildPythonPackage {
1098 name = "pycurl-7.19.5";
1163 name = "pycurl-7.19.5";
1099 buildInputs = with self; [];
1164 buildInputs = with self; [];
1100 doCheck = false;
1165 doCheck = false;
1101 propagatedBuildInputs = with self; [];
1166 propagatedBuildInputs = with self; [];
1102 src = fetchurl {
1167 src = fetchurl {
1103 url = "https://pypi.python.org/packages/6c/48/13bad289ef6f4869b1d8fc11ae54de8cfb3cc4a2eb9f7419c506f763be46/pycurl-7.19.5.tar.gz";
1168 url = "https://pypi.python.org/packages/6c/48/13bad289ef6f4869b1d8fc11ae54de8cfb3cc4a2eb9f7419c506f763be46/pycurl-7.19.5.tar.gz";
1104 md5 = "47b4eac84118e2606658122104e62072";
1169 md5 = "47b4eac84118e2606658122104e62072";
1105 };
1170 };
1106 meta = {
1171 meta = {
1107 license = [ pkgs.lib.licenses.mit { fullName = "LGPL/MIT"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1172 license = [ pkgs.lib.licenses.mit { fullName = "LGPL/MIT"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1108 };
1173 };
1109 };
1174 };
1110 pyflakes = super.buildPythonPackage {
1175 pyflakes = super.buildPythonPackage {
1111 name = "pyflakes-0.8.1";
1176 name = "pyflakes-0.8.1";
1112 buildInputs = with self; [];
1177 buildInputs = with self; [];
1113 doCheck = false;
1178 doCheck = false;
1114 propagatedBuildInputs = with self; [];
1179 propagatedBuildInputs = with self; [];
1115 src = fetchurl {
1180 src = fetchurl {
1116 url = "https://pypi.python.org/packages/75/22/a90ec0252f4f87f3ffb6336504de71fe16a49d69c4538dae2f12b9360a38/pyflakes-0.8.1.tar.gz";
1181 url = "https://pypi.python.org/packages/75/22/a90ec0252f4f87f3ffb6336504de71fe16a49d69c4538dae2f12b9360a38/pyflakes-0.8.1.tar.gz";
1117 md5 = "905fe91ad14b912807e8fdc2ac2e2c23";
1182 md5 = "905fe91ad14b912807e8fdc2ac2e2c23";
1118 };
1183 };
1119 meta = {
1184 meta = {
1120 license = [ pkgs.lib.licenses.mit ];
1185 license = [ pkgs.lib.licenses.mit ];
1121 };
1186 };
1122 };
1187 };
1188 pygments-markdown-lexer = super.buildPythonPackage {
1189 name = "pygments-markdown-lexer-0.1.0.dev39";
1190 buildInputs = with self; [];
1191 doCheck = false;
1192 propagatedBuildInputs = with self; [Pygments];
1193 src = fetchurl {
1194 url = "https://pypi.python.org/packages/c3/12/674cdee66635d638cedb2c5d9c85ce507b7b2f91bdba29e482f1b1160ff6/pygments-markdown-lexer-0.1.0.dev39.zip";
1195 md5 = "6360fe0f6d1f896e35b7a0142ce6459c";
1196 };
1197 meta = {
1198 license = [ pkgs.lib.licenses.asl20 ];
1199 };
1200 };
1123 pyparsing = super.buildPythonPackage {
1201 pyparsing = super.buildPythonPackage {
1124 name = "pyparsing-1.5.7";
1202 name = "pyparsing-1.5.7";
1125 buildInputs = with self; [];
1203 buildInputs = with self; [];
1126 doCheck = false;
1204 doCheck = false;
1127 propagatedBuildInputs = with self; [];
1205 propagatedBuildInputs = with self; [];
1128 src = fetchurl {
1206 src = fetchurl {
1129 url = "https://pypi.python.org/packages/2e/26/e8fb5b4256a5f5036be7ce115ef8db8d06bc537becfbdc46c6af008314ee/pyparsing-1.5.7.zip";
1207 url = "https://pypi.python.org/packages/2e/26/e8fb5b4256a5f5036be7ce115ef8db8d06bc537becfbdc46c6af008314ee/pyparsing-1.5.7.zip";
1130 md5 = "b86854857a368d6ccb4d5b6e76d0637f";
1208 md5 = "b86854857a368d6ccb4d5b6e76d0637f";
1131 };
1209 };
1132 meta = {
1210 meta = {
1133 license = [ pkgs.lib.licenses.mit ];
1211 license = [ pkgs.lib.licenses.mit ];
1134 };
1212 };
1135 };
1213 };
1136 pyramid = super.buildPythonPackage {
1214 pyramid = super.buildPythonPackage {
1137 name = "pyramid-1.6.1";
1215 name = "pyramid-1.6.1";
1138 buildInputs = with self; [];
1216 buildInputs = with self; [];
1139 doCheck = false;
1217 doCheck = false;
1140 propagatedBuildInputs = with self; [setuptools WebOb repoze.lru zope.interface zope.deprecation venusian translationstring PasteDeploy];
1218 propagatedBuildInputs = with self; [setuptools WebOb repoze.lru zope.interface zope.deprecation venusian translationstring PasteDeploy];
1141 src = fetchurl {
1219 src = fetchurl {
1142 url = "https://pypi.python.org/packages/30/b3/fcc4a2a4800cbf21989e00454b5828cf1f7fe35c63e0810b350e56d4c475/pyramid-1.6.1.tar.gz";
1220 url = "https://pypi.python.org/packages/30/b3/fcc4a2a4800cbf21989e00454b5828cf1f7fe35c63e0810b350e56d4c475/pyramid-1.6.1.tar.gz";
1143 md5 = "b18688ff3cc33efdbb098a35b45dd122";
1221 md5 = "b18688ff3cc33efdbb098a35b45dd122";
1144 };
1222 };
1145 meta = {
1223 meta = {
1146 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1224 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1147 };
1225 };
1148 };
1226 };
1149 pyramid-beaker = super.buildPythonPackage {
1227 pyramid-beaker = super.buildPythonPackage {
1150 name = "pyramid-beaker-0.8";
1228 name = "pyramid-beaker-0.8";
1151 buildInputs = with self; [];
1229 buildInputs = with self; [];
1152 doCheck = false;
1230 doCheck = false;
1153 propagatedBuildInputs = with self; [pyramid Beaker];
1231 propagatedBuildInputs = with self; [pyramid Beaker];
1154 src = fetchurl {
1232 src = fetchurl {
1155 url = "https://pypi.python.org/packages/d9/6e/b85426e00fd3d57f4545f74e1c3828552d8700f13ededeef9233f7bca8be/pyramid_beaker-0.8.tar.gz";
1233 url = "https://pypi.python.org/packages/d9/6e/b85426e00fd3d57f4545f74e1c3828552d8700f13ededeef9233f7bca8be/pyramid_beaker-0.8.tar.gz";
1156 md5 = "22f14be31b06549f80890e2c63a93834";
1234 md5 = "22f14be31b06549f80890e2c63a93834";
1157 };
1235 };
1158 meta = {
1236 meta = {
1159 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1237 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1160 };
1238 };
1161 };
1239 };
1162 pyramid-debugtoolbar = super.buildPythonPackage {
1240 pyramid-debugtoolbar = super.buildPythonPackage {
1163 name = "pyramid-debugtoolbar-2.4.2";
1241 name = "pyramid-debugtoolbar-2.4.2";
1164 buildInputs = with self; [];
1242 buildInputs = with self; [];
1165 doCheck = false;
1243 doCheck = false;
1166 propagatedBuildInputs = with self; [pyramid pyramid-mako repoze.lru Pygments];
1244 propagatedBuildInputs = with self; [pyramid pyramid-mako repoze.lru Pygments];
1167 src = fetchurl {
1245 src = fetchurl {
1168 url = "https://pypi.python.org/packages/89/00/ed5426ee41ed747ba3ffd30e8230841a6878286ea67d480b1444d24f06a2/pyramid_debugtoolbar-2.4.2.tar.gz";
1246 url = "https://pypi.python.org/packages/89/00/ed5426ee41ed747ba3ffd30e8230841a6878286ea67d480b1444d24f06a2/pyramid_debugtoolbar-2.4.2.tar.gz";
1169 md5 = "073ea67086cc4bd5decc3a000853642d";
1247 md5 = "073ea67086cc4bd5decc3a000853642d";
1170 };
1248 };
1171 meta = {
1249 meta = {
1172 license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ];
1250 license = [ { fullName = "Repoze Public License"; } pkgs.lib.licenses.bsdOriginal ];
1173 };
1251 };
1174 };
1252 };
1175 pyramid-jinja2 = super.buildPythonPackage {
1253 pyramid-jinja2 = super.buildPythonPackage {
1176 name = "pyramid-jinja2-2.5";
1254 name = "pyramid-jinja2-2.5";
1177 buildInputs = with self; [];
1255 buildInputs = with self; [];
1178 doCheck = false;
1256 doCheck = false;
1179 propagatedBuildInputs = with self; [pyramid zope.deprecation Jinja2 MarkupSafe];
1257 propagatedBuildInputs = with self; [pyramid zope.deprecation Jinja2 MarkupSafe];
1180 src = fetchurl {
1258 src = fetchurl {
1181 url = "https://pypi.python.org/packages/a1/80/595e26ffab7deba7208676b6936b7e5a721875710f982e59899013cae1ed/pyramid_jinja2-2.5.tar.gz";
1259 url = "https://pypi.python.org/packages/a1/80/595e26ffab7deba7208676b6936b7e5a721875710f982e59899013cae1ed/pyramid_jinja2-2.5.tar.gz";
1182 md5 = "07cb6547204ac5e6f0b22a954ccee928";
1260 md5 = "07cb6547204ac5e6f0b22a954ccee928";
1183 };
1261 };
1184 meta = {
1262 meta = {
1185 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1263 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1186 };
1264 };
1187 };
1265 };
1188 pyramid-mako = super.buildPythonPackage {
1266 pyramid-mako = super.buildPythonPackage {
1189 name = "pyramid-mako-1.0.2";
1267 name = "pyramid-mako-1.0.2";
1190 buildInputs = with self; [];
1268 buildInputs = with self; [];
1191 doCheck = false;
1269 doCheck = false;
1192 propagatedBuildInputs = with self; [pyramid Mako];
1270 propagatedBuildInputs = with self; [pyramid Mako];
1193 src = fetchurl {
1271 src = fetchurl {
1194 url = "https://pypi.python.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
1272 url = "https://pypi.python.org/packages/f1/92/7e69bcf09676d286a71cb3bbb887b16595b96f9ba7adbdc239ffdd4b1eb9/pyramid_mako-1.0.2.tar.gz";
1195 md5 = "ee25343a97eb76bd90abdc2a774eb48a";
1273 md5 = "ee25343a97eb76bd90abdc2a774eb48a";
1196 };
1274 };
1197 meta = {
1275 meta = {
1198 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1276 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1199 };
1277 };
1200 };
1278 };
1201 pysqlite = super.buildPythonPackage {
1279 pysqlite = super.buildPythonPackage {
1202 name = "pysqlite-2.6.3";
1280 name = "pysqlite-2.6.3";
1203 buildInputs = with self; [];
1281 buildInputs = with self; [];
1204 doCheck = false;
1282 doCheck = false;
1205 propagatedBuildInputs = with self; [];
1283 propagatedBuildInputs = with self; [];
1206 src = fetchurl {
1284 src = fetchurl {
1207 url = "https://pypi.python.org/packages/5c/a6/1c429cd4c8069cf4bfbd0eb4d592b3f4042155a8202df83d7e9b93aa3dc2/pysqlite-2.6.3.tar.gz";
1285 url = "https://pypi.python.org/packages/5c/a6/1c429cd4c8069cf4bfbd0eb4d592b3f4042155a8202df83d7e9b93aa3dc2/pysqlite-2.6.3.tar.gz";
1208 md5 = "7ff1cedee74646b50117acff87aa1cfa";
1286 md5 = "7ff1cedee74646b50117acff87aa1cfa";
1209 };
1287 };
1210 meta = {
1288 meta = {
1211 license = [ { fullName = "zlib/libpng License"; } { fullName = "zlib/libpng license"; } ];
1289 license = [ { fullName = "zlib/libpng License"; } { fullName = "zlib/libpng license"; } ];
1212 };
1290 };
1213 };
1291 };
1214 pytest = super.buildPythonPackage {
1292 pytest = super.buildPythonPackage {
1215 name = "pytest-2.8.5";
1293 name = "pytest-2.8.5";
1216 buildInputs = with self; [];
1294 buildInputs = with self; [];
1217 doCheck = false;
1295 doCheck = false;
1218 propagatedBuildInputs = with self; [py];
1296 propagatedBuildInputs = with self; [py];
1219 src = fetchurl {
1297 src = fetchurl {
1220 url = "https://pypi.python.org/packages/b1/3d/d7ea9b0c51e0cacded856e49859f0a13452747491e842c236bbab3714afe/pytest-2.8.5.zip";
1298 url = "https://pypi.python.org/packages/b1/3d/d7ea9b0c51e0cacded856e49859f0a13452747491e842c236bbab3714afe/pytest-2.8.5.zip";
1221 md5 = "8493b06f700862f1294298d6c1b715a9";
1299 md5 = "8493b06f700862f1294298d6c1b715a9";
1222 };
1300 };
1223 meta = {
1301 meta = {
1224 license = [ pkgs.lib.licenses.mit ];
1302 license = [ pkgs.lib.licenses.mit ];
1225 };
1303 };
1226 };
1304 };
1227 pytest-catchlog = super.buildPythonPackage {
1305 pytest-catchlog = super.buildPythonPackage {
1228 name = "pytest-catchlog-1.2.2";
1306 name = "pytest-catchlog-1.2.2";
1229 buildInputs = with self; [];
1307 buildInputs = with self; [];
1230 doCheck = false;
1308 doCheck = false;
1231 propagatedBuildInputs = with self; [py pytest];
1309 propagatedBuildInputs = with self; [py pytest];
1232 src = fetchurl {
1310 src = fetchurl {
1233 url = "https://pypi.python.org/packages/f2/2b/2faccdb1a978fab9dd0bf31cca9f6847fbe9184a0bdcc3011ac41dd44191/pytest-catchlog-1.2.2.zip";
1311 url = "https://pypi.python.org/packages/f2/2b/2faccdb1a978fab9dd0bf31cca9f6847fbe9184a0bdcc3011ac41dd44191/pytest-catchlog-1.2.2.zip";
1234 md5 = "09d890c54c7456c818102b7ff8c182c8";
1312 md5 = "09d890c54c7456c818102b7ff8c182c8";
1235 };
1313 };
1236 meta = {
1314 meta = {
1237 license = [ pkgs.lib.licenses.mit ];
1315 license = [ pkgs.lib.licenses.mit ];
1238 };
1316 };
1239 };
1317 };
1240 pytest-cov = super.buildPythonPackage {
1318 pytest-cov = super.buildPythonPackage {
1241 name = "pytest-cov-1.8.1";
1319 name = "pytest-cov-1.8.1";
1242 buildInputs = with self; [];
1320 buildInputs = with self; [];
1243 doCheck = false;
1321 doCheck = false;
1244 propagatedBuildInputs = with self; [py pytest coverage cov-core];
1322 propagatedBuildInputs = with self; [py pytest coverage cov-core];
1245 src = fetchurl {
1323 src = fetchurl {
1246 url = "https://pypi.python.org/packages/11/4b/b04646e97f1721878eb21e9f779102d84dd044d324382263b1770a3e4838/pytest-cov-1.8.1.tar.gz";
1324 url = "https://pypi.python.org/packages/11/4b/b04646e97f1721878eb21e9f779102d84dd044d324382263b1770a3e4838/pytest-cov-1.8.1.tar.gz";
1247 md5 = "76c778afa2494088270348be42d759fc";
1325 md5 = "76c778afa2494088270348be42d759fc";
1248 };
1326 };
1249 meta = {
1327 meta = {
1250 license = [ pkgs.lib.licenses.mit ];
1328 license = [ pkgs.lib.licenses.mit ];
1251 };
1329 };
1252 };
1330 };
1253 pytest-profiling = super.buildPythonPackage {
1331 pytest-profiling = super.buildPythonPackage {
1254 name = "pytest-profiling-1.0.1";
1332 name = "pytest-profiling-1.0.1";
1255 buildInputs = with self; [];
1333 buildInputs = with self; [];
1256 doCheck = false;
1334 doCheck = false;
1257 propagatedBuildInputs = with self; [six pytest gprof2dot];
1335 propagatedBuildInputs = with self; [six pytest gprof2dot];
1258 src = fetchurl {
1336 src = fetchurl {
1259 url = "https://pypi.python.org/packages/d8/67/8ffab73406e22870e07fa4dc8dce1d7689b26dba8efd00161c9b6fc01ec0/pytest-profiling-1.0.1.tar.gz";
1337 url = "https://pypi.python.org/packages/d8/67/8ffab73406e22870e07fa4dc8dce1d7689b26dba8efd00161c9b6fc01ec0/pytest-profiling-1.0.1.tar.gz";
1260 md5 = "354404eb5b3fd4dc5eb7fffbb3d9b68b";
1338 md5 = "354404eb5b3fd4dc5eb7fffbb3d9b68b";
1261 };
1339 };
1262 meta = {
1340 meta = {
1263 license = [ pkgs.lib.licenses.mit ];
1341 license = [ pkgs.lib.licenses.mit ];
1264 };
1342 };
1265 };
1343 };
1266 pytest-runner = super.buildPythonPackage {
1344 pytest-runner = super.buildPythonPackage {
1267 name = "pytest-runner-2.7.1";
1345 name = "pytest-runner-2.7.1";
1268 buildInputs = with self; [];
1346 buildInputs = with self; [];
1269 doCheck = false;
1347 doCheck = false;
1270 propagatedBuildInputs = with self; [];
1348 propagatedBuildInputs = with self; [];
1271 src = fetchurl {
1349 src = fetchurl {
1272 url = "https://pypi.python.org/packages/99/6b/c4ff4418d3424d4475b7af60724fd4a5cdd91ed8e489dc9443281f0052bc/pytest-runner-2.7.1.tar.gz";
1350 url = "https://pypi.python.org/packages/99/6b/c4ff4418d3424d4475b7af60724fd4a5cdd91ed8e489dc9443281f0052bc/pytest-runner-2.7.1.tar.gz";
1273 md5 = "e56f0bc8d79a6bd91772b44ef4215c7e";
1351 md5 = "e56f0bc8d79a6bd91772b44ef4215c7e";
1274 };
1352 };
1275 meta = {
1353 meta = {
1276 license = [ pkgs.lib.licenses.mit ];
1354 license = [ pkgs.lib.licenses.mit ];
1277 };
1355 };
1278 };
1356 };
1279 pytest-timeout = super.buildPythonPackage {
1357 pytest-timeout = super.buildPythonPackage {
1280 name = "pytest-timeout-0.4";
1358 name = "pytest-timeout-0.4";
1281 buildInputs = with self; [];
1359 buildInputs = with self; [];
1282 doCheck = false;
1360 doCheck = false;
1283 propagatedBuildInputs = with self; [pytest];
1361 propagatedBuildInputs = with self; [pytest];
1284 src = fetchurl {
1362 src = fetchurl {
1285 url = "https://pypi.python.org/packages/24/48/5f6bd4b8026a26e1dd427243d560a29a0f1b24a5c7cffca4bf049a7bb65b/pytest-timeout-0.4.tar.gz";
1363 url = "https://pypi.python.org/packages/24/48/5f6bd4b8026a26e1dd427243d560a29a0f1b24a5c7cffca4bf049a7bb65b/pytest-timeout-0.4.tar.gz";
1286 md5 = "03b28aff69cbbfb959ed35ade5fde262";
1364 md5 = "03b28aff69cbbfb959ed35ade5fde262";
1287 };
1365 };
1288 meta = {
1366 meta = {
1289 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
1367 license = [ pkgs.lib.licenses.mit { fullName = "DFSG approved"; } ];
1290 };
1368 };
1291 };
1369 };
1292 python-dateutil = super.buildPythonPackage {
1370 python-dateutil = super.buildPythonPackage {
1293 name = "python-dateutil-1.5";
1371 name = "python-dateutil-1.5";
1294 buildInputs = with self; [];
1372 buildInputs = with self; [];
1295 doCheck = false;
1373 doCheck = false;
1296 propagatedBuildInputs = with self; [];
1374 propagatedBuildInputs = with self; [];
1297 src = fetchurl {
1375 src = fetchurl {
1298 url = "https://pypi.python.org/packages/b4/7c/df59c89a753eb33c7c44e1dd42de0e9bc2ccdd5a4d576e0bfad97cc280cb/python-dateutil-1.5.tar.gz";
1376 url = "https://pypi.python.org/packages/b4/7c/df59c89a753eb33c7c44e1dd42de0e9bc2ccdd5a4d576e0bfad97cc280cb/python-dateutil-1.5.tar.gz";
1299 md5 = "0dcb1de5e5cad69490a3b6ab63f0cfa5";
1377 md5 = "0dcb1de5e5cad69490a3b6ab63f0cfa5";
1300 };
1378 };
1301 meta = {
1379 meta = {
1302 license = [ pkgs.lib.licenses.psfl ];
1380 license = [ pkgs.lib.licenses.psfl ];
1303 };
1381 };
1304 };
1382 };
1305 python-editor = super.buildPythonPackage {
1383 python-editor = super.buildPythonPackage {
1306 name = "python-editor-1.0.1";
1384 name = "python-editor-1.0.1";
1307 buildInputs = with self; [];
1385 buildInputs = with self; [];
1308 doCheck = false;
1386 doCheck = false;
1309 propagatedBuildInputs = with self; [];
1387 propagatedBuildInputs = with self; [];
1310 src = fetchurl {
1388 src = fetchurl {
1311 url = "https://pypi.python.org/packages/2b/c0/df7b87d5cf016f82eab3b05cd35f53287c1178ad8c42bfb6fa61b89b22f6/python-editor-1.0.1.tar.gz";
1389 url = "https://pypi.python.org/packages/2b/c0/df7b87d5cf016f82eab3b05cd35f53287c1178ad8c42bfb6fa61b89b22f6/python-editor-1.0.1.tar.gz";
1312 md5 = "e1fa63535b40e022fa4fd646fd8b511a";
1390 md5 = "e1fa63535b40e022fa4fd646fd8b511a";
1313 };
1391 };
1314 meta = {
1392 meta = {
1315 license = [ pkgs.lib.licenses.asl20 { fullName = "Apache"; } ];
1393 license = [ pkgs.lib.licenses.asl20 { fullName = "Apache"; } ];
1316 };
1394 };
1317 };
1395 };
1318 python-ldap = super.buildPythonPackage {
1396 python-ldap = super.buildPythonPackage {
1319 name = "python-ldap-2.4.19";
1397 name = "python-ldap-2.4.19";
1320 buildInputs = with self; [];
1398 buildInputs = with self; [];
1321 doCheck = false;
1399 doCheck = false;
1322 propagatedBuildInputs = with self; [setuptools];
1400 propagatedBuildInputs = with self; [setuptools];
1323 src = fetchurl {
1401 src = fetchurl {
1324 url = "https://pypi.python.org/packages/42/81/1b64838c82e64f14d4e246ff00b52e650a35c012551b891ada2b85d40737/python-ldap-2.4.19.tar.gz";
1402 url = "https://pypi.python.org/packages/42/81/1b64838c82e64f14d4e246ff00b52e650a35c012551b891ada2b85d40737/python-ldap-2.4.19.tar.gz";
1325 md5 = "b941bf31d09739492aa19ef679e94ae3";
1403 md5 = "b941bf31d09739492aa19ef679e94ae3";
1326 };
1404 };
1327 meta = {
1405 meta = {
1328 license = [ pkgs.lib.licenses.psfl ];
1406 license = [ pkgs.lib.licenses.psfl ];
1329 };
1407 };
1330 };
1408 };
1331 python-memcached = super.buildPythonPackage {
1409 python-memcached = super.buildPythonPackage {
1332 name = "python-memcached-1.57";
1410 name = "python-memcached-1.57";
1333 buildInputs = with self; [];
1411 buildInputs = with self; [];
1334 doCheck = false;
1412 doCheck = false;
1335 propagatedBuildInputs = with self; [six];
1413 propagatedBuildInputs = with self; [six];
1336 src = fetchurl {
1414 src = fetchurl {
1337 url = "https://pypi.python.org/packages/52/9d/eebc0dcbc5c7c66840ad207dfc1baa376dadb74912484bff73819cce01e6/python-memcached-1.57.tar.gz";
1415 url = "https://pypi.python.org/packages/52/9d/eebc0dcbc5c7c66840ad207dfc1baa376dadb74912484bff73819cce01e6/python-memcached-1.57.tar.gz";
1338 md5 = "de21f64b42b2d961f3d4ad7beb5468a1";
1416 md5 = "de21f64b42b2d961f3d4ad7beb5468a1";
1339 };
1417 };
1340 meta = {
1418 meta = {
1341 license = [ pkgs.lib.licenses.psfl ];
1419 license = [ pkgs.lib.licenses.psfl ];
1342 };
1420 };
1343 };
1421 };
1344 python-pam = super.buildPythonPackage {
1422 python-pam = super.buildPythonPackage {
1345 name = "python-pam-1.8.2";
1423 name = "python-pam-1.8.2";
1346 buildInputs = with self; [];
1424 buildInputs = with self; [];
1347 doCheck = false;
1425 doCheck = false;
1348 propagatedBuildInputs = with self; [];
1426 propagatedBuildInputs = with self; [];
1349 src = fetchurl {
1427 src = fetchurl {
1350 url = "https://pypi.python.org/packages/de/8c/f8f5d38b4f26893af267ea0b39023d4951705ab0413a39e0cf7cf4900505/python-pam-1.8.2.tar.gz";
1428 url = "https://pypi.python.org/packages/de/8c/f8f5d38b4f26893af267ea0b39023d4951705ab0413a39e0cf7cf4900505/python-pam-1.8.2.tar.gz";
1351 md5 = "db71b6b999246fb05d78ecfbe166629d";
1429 md5 = "db71b6b999246fb05d78ecfbe166629d";
1352 };
1430 };
1353 meta = {
1431 meta = {
1354 license = [ { fullName = "License :: OSI Approved :: MIT License"; } pkgs.lib.licenses.mit ];
1432 license = [ { fullName = "License :: OSI Approved :: MIT License"; } pkgs.lib.licenses.mit ];
1355 };
1433 };
1356 };
1434 };
1357 pytz = super.buildPythonPackage {
1435 pytz = super.buildPythonPackage {
1358 name = "pytz-2015.4";
1436 name = "pytz-2015.4";
1359 buildInputs = with self; [];
1437 buildInputs = with self; [];
1360 doCheck = false;
1438 doCheck = false;
1361 propagatedBuildInputs = with self; [];
1439 propagatedBuildInputs = with self; [];
1362 src = fetchurl {
1440 src = fetchurl {
1363 url = "https://pypi.python.org/packages/7e/1a/f43b5c92df7b156822030fed151327ea096bcf417e45acc23bd1df43472f/pytz-2015.4.zip";
1441 url = "https://pypi.python.org/packages/7e/1a/f43b5c92df7b156822030fed151327ea096bcf417e45acc23bd1df43472f/pytz-2015.4.zip";
1364 md5 = "233f2a2b370d03f9b5911700cc9ebf3c";
1442 md5 = "233f2a2b370d03f9b5911700cc9ebf3c";
1365 };
1443 };
1366 meta = {
1444 meta = {
1367 license = [ pkgs.lib.licenses.mit ];
1445 license = [ pkgs.lib.licenses.mit ];
1368 };
1446 };
1369 };
1447 };
1370 pyzmq = super.buildPythonPackage {
1448 pyzmq = super.buildPythonPackage {
1371 name = "pyzmq-14.6.0";
1449 name = "pyzmq-14.6.0";
1372 buildInputs = with self; [];
1450 buildInputs = with self; [];
1373 doCheck = false;
1451 doCheck = false;
1374 propagatedBuildInputs = with self; [];
1452 propagatedBuildInputs = with self; [];
1375 src = fetchurl {
1453 src = fetchurl {
1376 url = "https://pypi.python.org/packages/8a/3b/5463d5a9d712cd8bbdac335daece0d69f6a6792da4e3dd89956c0db4e4e6/pyzmq-14.6.0.tar.gz";
1454 url = "https://pypi.python.org/packages/8a/3b/5463d5a9d712cd8bbdac335daece0d69f6a6792da4e3dd89956c0db4e4e6/pyzmq-14.6.0.tar.gz";
1377 md5 = "395b5de95a931afa5b14c9349a5b8024";
1455 md5 = "395b5de95a931afa5b14c9349a5b8024";
1378 };
1456 };
1379 meta = {
1457 meta = {
1380 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "LGPL+BSD"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1458 license = [ pkgs.lib.licenses.bsdOriginal { fullName = "LGPL+BSD"; } { fullName = "GNU Library or Lesser General Public License (LGPL)"; } ];
1381 };
1459 };
1382 };
1460 };
1383 recaptcha-client = super.buildPythonPackage {
1461 recaptcha-client = super.buildPythonPackage {
1384 name = "recaptcha-client-1.0.6";
1462 name = "recaptcha-client-1.0.6";
1385 buildInputs = with self; [];
1463 buildInputs = with self; [];
1386 doCheck = false;
1464 doCheck = false;
1387 propagatedBuildInputs = with self; [];
1465 propagatedBuildInputs = with self; [];
1388 src = fetchurl {
1466 src = fetchurl {
1389 url = "https://pypi.python.org/packages/0a/ea/5f2fbbfd894bdac1c68ef8d92019066cfcf9fbff5fe3d728d2b5c25c8db4/recaptcha-client-1.0.6.tar.gz";
1467 url = "https://pypi.python.org/packages/0a/ea/5f2fbbfd894bdac1c68ef8d92019066cfcf9fbff5fe3d728d2b5c25c8db4/recaptcha-client-1.0.6.tar.gz";
1390 md5 = "74228180f7e1fb76c4d7089160b0d919";
1468 md5 = "74228180f7e1fb76c4d7089160b0d919";
1391 };
1469 };
1392 meta = {
1470 meta = {
1393 license = [ { fullName = "MIT/X11"; } ];
1471 license = [ { fullName = "MIT/X11"; } ];
1394 };
1472 };
1395 };
1473 };
1396 repoze.lru = super.buildPythonPackage {
1474 repoze.lru = super.buildPythonPackage {
1397 name = "repoze.lru-0.6";
1475 name = "repoze.lru-0.6";
1398 buildInputs = with self; [];
1476 buildInputs = with self; [];
1399 doCheck = false;
1477 doCheck = false;
1400 propagatedBuildInputs = with self; [];
1478 propagatedBuildInputs = with self; [];
1401 src = fetchurl {
1479 src = fetchurl {
1402 url = "https://pypi.python.org/packages/6e/1e/aa15cc90217e086dc8769872c8778b409812ff036bf021b15795638939e4/repoze.lru-0.6.tar.gz";
1480 url = "https://pypi.python.org/packages/6e/1e/aa15cc90217e086dc8769872c8778b409812ff036bf021b15795638939e4/repoze.lru-0.6.tar.gz";
1403 md5 = "2c3b64b17a8e18b405f55d46173e14dd";
1481 md5 = "2c3b64b17a8e18b405f55d46173e14dd";
1404 };
1482 };
1405 meta = {
1483 meta = {
1406 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1484 license = [ { fullName = "Repoze Public License"; } { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1407 };
1485 };
1408 };
1486 };
1409 requests = super.buildPythonPackage {
1487 requests = super.buildPythonPackage {
1410 name = "requests-2.9.1";
1488 name = "requests-2.9.1";
1411 buildInputs = with self; [];
1489 buildInputs = with self; [];
1412 doCheck = false;
1490 doCheck = false;
1413 propagatedBuildInputs = with self; [];
1491 propagatedBuildInputs = with self; [];
1414 src = fetchurl {
1492 src = fetchurl {
1415 url = "https://pypi.python.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz";
1493 url = "https://pypi.python.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz";
1416 md5 = "0b7f480d19012ec52bab78292efd976d";
1494 md5 = "0b7f480d19012ec52bab78292efd976d";
1417 };
1495 };
1418 meta = {
1496 meta = {
1419 license = [ pkgs.lib.licenses.asl20 ];
1497 license = [ pkgs.lib.licenses.asl20 ];
1420 };
1498 };
1421 };
1499 };
1422 rhodecode-enterprise-ce = super.buildPythonPackage {
1500 rhodecode-enterprise-ce = super.buildPythonPackage {
1423 name = "rhodecode-enterprise-ce-4.4.2";
1501 name = "rhodecode-enterprise-ce-4.5.0";
1424 buildInputs = with self; [WebTest configobj cssselect flake8 lxml mock pytest pytest-cov pytest-runner];
1502 buildInputs = with self; [WebTest configobj cssselect lxml mock pytest pytest-cov pytest-runner pytest-sugar];
1425 doCheck = true;
1503 doCheck = true;
1426 propagatedBuildInputs = with self; [Babel Beaker FormEncode Mako Markdown MarkupSafe MySQL-python Paste PasteDeploy PasteScript Pygments Pylons Pyro4 Routes SQLAlchemy Tempita URLObject WebError WebHelpers WebHelpers2 WebOb WebTest Whoosh alembic amqplib anyjson appenlight-client authomatic backport-ipaddress celery channelstream colander decorator deform docutils gevent gunicorn infrae.cache ipython iso8601 kombu msgpack-python packaging psycopg2 py-gfm pycrypto pycurl pyparsing pyramid pyramid-debugtoolbar pyramid-mako pyramid-beaker pysqlite python-dateutil python-ldap python-memcached python-pam recaptcha-client repoze.lru requests simplejson waitress zope.cachedescriptors dogpile.cache dogpile.core psutil py-bcrypt];
1504 propagatedBuildInputs = with self; [Babel Beaker FormEncode Mako Markdown MarkupSafe MySQL-python Paste PasteDeploy PasteScript Pygments pygments-markdown-lexer Pylons Pyro4 Routes SQLAlchemy Tempita URLObject WebError WebHelpers WebHelpers2 WebOb WebTest Whoosh alembic amqplib anyjson appenlight-client authomatic backport-ipaddress celery channelstream colander decorator deform docutils gevent gunicorn infrae.cache ipython iso8601 kombu msgpack-python packaging psycopg2 py-gfm pycrypto pycurl pyparsing pyramid pyramid-debugtoolbar pyramid-mako pyramid-beaker pysqlite python-dateutil python-ldap python-memcached python-pam recaptcha-client repoze.lru requests simplejson subprocess32 waitress zope.cachedescriptors dogpile.cache dogpile.core psutil py-bcrypt];
1427 src = ./.;
1505 src = ./.;
1428 meta = {
1506 meta = {
1429 license = [ { fullName = "AGPLv3, and Commercial License"; } ];
1507 license = [ { fullName = "AGPLv3, and Commercial License"; } ];
1430 };
1508 };
1431 };
1509 };
1432 rhodecode-tools = super.buildPythonPackage {
1510 rhodecode-tools = super.buildPythonPackage {
1433 name = "rhodecode-tools-0.10.2";
1511 name = "rhodecode-tools-0.10.2";
1434 buildInputs = with self; [];
1512 buildInputs = with self; [];
1435 doCheck = false;
1513 doCheck = false;
1436 propagatedBuildInputs = with self; [click future six Mako MarkupSafe requests Whoosh elasticsearch elasticsearch-dsl urllib3];
1514 propagatedBuildInputs = with self; [click future six Mako MarkupSafe requests Whoosh elasticsearch elasticsearch-dsl urllib3];
1437 src = fetchurl {
1515 src = fetchurl {
1438 url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.10.2.zip";
1516 url = "https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.10.2.zip";
1439 md5 = "d2af3985a1a32a678944d4d48870cb04";
1517 md5 = "d2af3985a1a32a678944d4d48870cb04";
1440 };
1518 };
1441 meta = {
1519 meta = {
1442 license = [ { fullName = "AGPLv3 and Proprietary"; } ];
1520 license = [ { fullName = "AGPLv3 and Proprietary"; } ];
1443 };
1521 };
1444 };
1522 };
1445 serpent = super.buildPythonPackage {
1523 serpent = super.buildPythonPackage {
1446 name = "serpent-1.12";
1524 name = "serpent-1.12";
1447 buildInputs = with self; [];
1525 buildInputs = with self; [];
1448 doCheck = false;
1526 doCheck = false;
1449 propagatedBuildInputs = with self; [];
1527 propagatedBuildInputs = with self; [];
1450 src = fetchurl {
1528 src = fetchurl {
1451 url = "https://pypi.python.org/packages/3b/19/1e0e83b47c09edaef8398655088036e7e67386b5c48770218ebb339fbbd5/serpent-1.12.tar.gz";
1529 url = "https://pypi.python.org/packages/3b/19/1e0e83b47c09edaef8398655088036e7e67386b5c48770218ebb339fbbd5/serpent-1.12.tar.gz";
1452 md5 = "05869ac7b062828b34f8f927f0457b65";
1530 md5 = "05869ac7b062828b34f8f927f0457b65";
1453 };
1531 };
1454 meta = {
1532 meta = {
1455 license = [ pkgs.lib.licenses.mit ];
1533 license = [ pkgs.lib.licenses.mit ];
1456 };
1534 };
1457 };
1535 };
1458 setproctitle = super.buildPythonPackage {
1536 setproctitle = super.buildPythonPackage {
1459 name = "setproctitle-1.1.8";
1537 name = "setproctitle-1.1.8";
1460 buildInputs = with self; [];
1538 buildInputs = with self; [];
1461 doCheck = false;
1539 doCheck = false;
1462 propagatedBuildInputs = with self; [];
1540 propagatedBuildInputs = with self; [];
1463 src = fetchurl {
1541 src = fetchurl {
1464 url = "https://pypi.python.org/packages/33/c3/ad367a4f4f1ca90468863ae727ac62f6edb558fc09a003d344a02cfc6ea6/setproctitle-1.1.8.tar.gz";
1542 url = "https://pypi.python.org/packages/33/c3/ad367a4f4f1ca90468863ae727ac62f6edb558fc09a003d344a02cfc6ea6/setproctitle-1.1.8.tar.gz";
1465 md5 = "728f4c8c6031bbe56083a48594027edd";
1543 md5 = "728f4c8c6031bbe56083a48594027edd";
1466 };
1544 };
1467 meta = {
1545 meta = {
1468 license = [ pkgs.lib.licenses.bsdOriginal ];
1546 license = [ pkgs.lib.licenses.bsdOriginal ];
1469 };
1547 };
1470 };
1548 };
1471 setuptools = super.buildPythonPackage {
1549 setuptools = super.buildPythonPackage {
1472 name = "setuptools-20.8.1";
1550 name = "setuptools-20.8.1";
1473 buildInputs = with self; [];
1551 buildInputs = with self; [];
1474 doCheck = false;
1552 doCheck = false;
1475 propagatedBuildInputs = with self; [];
1553 propagatedBuildInputs = with self; [];
1476 src = fetchurl {
1554 src = fetchurl {
1477 url = "https://pypi.python.org/packages/c4/19/c1bdc88b53da654df43770f941079dbab4e4788c2dcb5658fb86259894c7/setuptools-20.8.1.zip";
1555 url = "https://pypi.python.org/packages/c4/19/c1bdc88b53da654df43770f941079dbab4e4788c2dcb5658fb86259894c7/setuptools-20.8.1.zip";
1478 md5 = "fe58a5cac0df20bb83942b252a4b0543";
1556 md5 = "fe58a5cac0df20bb83942b252a4b0543";
1479 };
1557 };
1480 meta = {
1558 meta = {
1481 license = [ pkgs.lib.licenses.mit ];
1559 license = [ pkgs.lib.licenses.mit ];
1482 };
1560 };
1483 };
1561 };
1484 setuptools-scm = super.buildPythonPackage {
1562 setuptools-scm = super.buildPythonPackage {
1485 name = "setuptools-scm-1.11.0";
1563 name = "setuptools-scm-1.11.0";
1486 buildInputs = with self; [];
1564 buildInputs = with self; [];
1487 doCheck = false;
1565 doCheck = false;
1488 propagatedBuildInputs = with self; [];
1566 propagatedBuildInputs = with self; [];
1489 src = fetchurl {
1567 src = fetchurl {
1490 url = "https://pypi.python.org/packages/cd/5f/e3a038292358058d83d764a47d09114aa5a8003ed4529518f9e580f1a94f/setuptools_scm-1.11.0.tar.gz";
1568 url = "https://pypi.python.org/packages/cd/5f/e3a038292358058d83d764a47d09114aa5a8003ed4529518f9e580f1a94f/setuptools_scm-1.11.0.tar.gz";
1491 md5 = "4c5c896ba52e134bbc3507bac6400087";
1569 md5 = "4c5c896ba52e134bbc3507bac6400087";
1492 };
1570 };
1493 meta = {
1571 meta = {
1494 license = [ pkgs.lib.licenses.mit ];
1572 license = [ pkgs.lib.licenses.mit ];
1495 };
1573 };
1496 };
1574 };
1575 simplegeneric = super.buildPythonPackage {
1576 name = "simplegeneric-0.8.1";
1577 buildInputs = with self; [];
1578 doCheck = false;
1579 propagatedBuildInputs = with self; [];
1580 src = fetchurl {
1581 url = "https://pypi.python.org/packages/3d/57/4d9c9e3ae9a255cd4e1106bb57e24056d3d0709fc01b2e3e345898e49d5b/simplegeneric-0.8.1.zip";
1582 md5 = "f9c1fab00fd981be588fc32759f474e3";
1583 };
1584 meta = {
1585 license = [ pkgs.lib.licenses.zpt21 ];
1586 };
1587 };
1497 simplejson = super.buildPythonPackage {
1588 simplejson = super.buildPythonPackage {
1498 name = "simplejson-3.7.2";
1589 name = "simplejson-3.7.2";
1499 buildInputs = with self; [];
1590 buildInputs = with self; [];
1500 doCheck = false;
1591 doCheck = false;
1501 propagatedBuildInputs = with self; [];
1592 propagatedBuildInputs = with self; [];
1502 src = fetchurl {
1593 src = fetchurl {
1503 url = "https://pypi.python.org/packages/6d/89/7f13f099344eea9d6722779a1f165087cb559598107844b1ac5dbd831fb1/simplejson-3.7.2.tar.gz";
1594 url = "https://pypi.python.org/packages/6d/89/7f13f099344eea9d6722779a1f165087cb559598107844b1ac5dbd831fb1/simplejson-3.7.2.tar.gz";
1504 md5 = "a5fc7d05d4cb38492285553def5d4b46";
1595 md5 = "a5fc7d05d4cb38492285553def5d4b46";
1505 };
1596 };
1506 meta = {
1597 meta = {
1507 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
1598 license = [ { fullName = "Academic Free License (AFL)"; } pkgs.lib.licenses.mit ];
1508 };
1599 };
1509 };
1600 };
1510 six = super.buildPythonPackage {
1601 six = super.buildPythonPackage {
1511 name = "six-1.9.0";
1602 name = "six-1.9.0";
1512 buildInputs = with self; [];
1603 buildInputs = with self; [];
1513 doCheck = false;
1604 doCheck = false;
1514 propagatedBuildInputs = with self; [];
1605 propagatedBuildInputs = with self; [];
1515 src = fetchurl {
1606 src = fetchurl {
1516 url = "https://pypi.python.org/packages/16/64/1dc5e5976b17466fd7d712e59cbe9fb1e18bec153109e5ba3ed6c9102f1a/six-1.9.0.tar.gz";
1607 url = "https://pypi.python.org/packages/16/64/1dc5e5976b17466fd7d712e59cbe9fb1e18bec153109e5ba3ed6c9102f1a/six-1.9.0.tar.gz";
1517 md5 = "476881ef4012262dfc8adc645ee786c4";
1608 md5 = "476881ef4012262dfc8adc645ee786c4";
1518 };
1609 };
1519 meta = {
1610 meta = {
1520 license = [ pkgs.lib.licenses.mit ];
1611 license = [ pkgs.lib.licenses.mit ];
1521 };
1612 };
1522 };
1613 };
1523 subprocess32 = super.buildPythonPackage {
1614 subprocess32 = super.buildPythonPackage {
1524 name = "subprocess32-3.2.6";
1615 name = "subprocess32-3.2.6";
1525 buildInputs = with self; [];
1616 buildInputs = with self; [];
1526 doCheck = false;
1617 doCheck = false;
1527 propagatedBuildInputs = with self; [];
1618 propagatedBuildInputs = with self; [];
1528 src = fetchurl {
1619 src = fetchurl {
1529 url = "https://pypi.python.org/packages/28/8d/33ccbff51053f59ae6c357310cac0e79246bbed1d345ecc6188b176d72c3/subprocess32-3.2.6.tar.gz";
1620 url = "https://pypi.python.org/packages/28/8d/33ccbff51053f59ae6c357310cac0e79246bbed1d345ecc6188b176d72c3/subprocess32-3.2.6.tar.gz";
1530 md5 = "754c5ab9f533e764f931136974b618f1";
1621 md5 = "754c5ab9f533e764f931136974b618f1";
1531 };
1622 };
1532 meta = {
1623 meta = {
1533 license = [ pkgs.lib.licenses.psfl ];
1624 license = [ pkgs.lib.licenses.psfl ];
1534 };
1625 };
1535 };
1626 };
1536 supervisor = super.buildPythonPackage {
1627 supervisor = super.buildPythonPackage {
1537 name = "supervisor-3.3.0";
1628 name = "supervisor-3.3.0";
1538 buildInputs = with self; [];
1629 buildInputs = with self; [];
1539 doCheck = false;
1630 doCheck = false;
1540 propagatedBuildInputs = with self; [meld3];
1631 propagatedBuildInputs = with self; [meld3];
1541 src = fetchurl {
1632 src = fetchurl {
1542 url = "https://pypi.python.org/packages/44/80/d28047d120bfcc8158b4e41127706731ee6a3419c661e0a858fb0e7c4b2d/supervisor-3.3.0.tar.gz";
1633 url = "https://pypi.python.org/packages/44/80/d28047d120bfcc8158b4e41127706731ee6a3419c661e0a858fb0e7c4b2d/supervisor-3.3.0.tar.gz";
1543 md5 = "46bac00378d1eddb616752b990c67416";
1634 md5 = "46bac00378d1eddb616752b990c67416";
1544 };
1635 };
1545 meta = {
1636 meta = {
1546 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1637 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1547 };
1638 };
1548 };
1639 };
1640 traitlets = super.buildPythonPackage {
1641 name = "traitlets-4.3.1";
1642 buildInputs = with self; [];
1643 doCheck = false;
1644 propagatedBuildInputs = with self; [ipython-genutils six decorator enum34];
1645 src = fetchurl {
1646 url = "https://pypi.python.org/packages/b1/d6/5b5aa6d5c474691909b91493da1e8972e309c9f01ecfe4aeafd272eb3234/traitlets-4.3.1.tar.gz";
1647 md5 = "dd0b1b6e5d31ce446d55a4b5e5083c98";
1648 };
1649 meta = {
1650 license = [ pkgs.lib.licenses.bsdOriginal ];
1651 };
1652 };
1549 transifex-client = super.buildPythonPackage {
1653 transifex-client = super.buildPythonPackage {
1550 name = "transifex-client-0.10";
1654 name = "transifex-client-0.10";
1551 buildInputs = with self; [];
1655 buildInputs = with self; [];
1552 doCheck = false;
1656 doCheck = false;
1553 propagatedBuildInputs = with self; [];
1657 propagatedBuildInputs = with self; [];
1554 src = fetchurl {
1658 src = fetchurl {
1555 url = "https://pypi.python.org/packages/f3/4e/7b925192aee656fb3e04fa6381c8b3dc40198047c3b4a356f6cfd642c809/transifex-client-0.10.tar.gz";
1659 url = "https://pypi.python.org/packages/f3/4e/7b925192aee656fb3e04fa6381c8b3dc40198047c3b4a356f6cfd642c809/transifex-client-0.10.tar.gz";
1556 md5 = "5549538d84b8eede6b254cd81ae024fa";
1660 md5 = "5549538d84b8eede6b254cd81ae024fa";
1557 };
1661 };
1558 meta = {
1662 meta = {
1559 license = [ pkgs.lib.licenses.gpl2 ];
1663 license = [ pkgs.lib.licenses.gpl2 ];
1560 };
1664 };
1561 };
1665 };
1562 translationstring = super.buildPythonPackage {
1666 translationstring = super.buildPythonPackage {
1563 name = "translationstring-1.3";
1667 name = "translationstring-1.3";
1564 buildInputs = with self; [];
1668 buildInputs = with self; [];
1565 doCheck = false;
1669 doCheck = false;
1566 propagatedBuildInputs = with self; [];
1670 propagatedBuildInputs = with self; [];
1567 src = fetchurl {
1671 src = fetchurl {
1568 url = "https://pypi.python.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
1672 url = "https://pypi.python.org/packages/5e/eb/bee578cc150b44c653b63f5ebe258b5d0d812ddac12497e5f80fcad5d0b4/translationstring-1.3.tar.gz";
1569 md5 = "a4b62e0f3c189c783a1685b3027f7c90";
1673 md5 = "a4b62e0f3c189c783a1685b3027f7c90";
1570 };
1674 };
1571 meta = {
1675 meta = {
1572 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
1676 license = [ { fullName = "BSD-like (http://repoze.org/license.html)"; } ];
1573 };
1677 };
1574 };
1678 };
1575 trollius = super.buildPythonPackage {
1679 trollius = super.buildPythonPackage {
1576 name = "trollius-1.0.4";
1680 name = "trollius-1.0.4";
1577 buildInputs = with self; [];
1681 buildInputs = with self; [];
1578 doCheck = false;
1682 doCheck = false;
1579 propagatedBuildInputs = with self; [futures];
1683 propagatedBuildInputs = with self; [futures];
1580 src = fetchurl {
1684 src = fetchurl {
1581 url = "https://pypi.python.org/packages/aa/e6/4141db437f55e6ee7a3fb69663239e3fde7841a811b4bef293145ad6c836/trollius-1.0.4.tar.gz";
1685 url = "https://pypi.python.org/packages/aa/e6/4141db437f55e6ee7a3fb69663239e3fde7841a811b4bef293145ad6c836/trollius-1.0.4.tar.gz";
1582 md5 = "3631a464d49d0cbfd30ab2918ef2b783";
1686 md5 = "3631a464d49d0cbfd30ab2918ef2b783";
1583 };
1687 };
1584 meta = {
1688 meta = {
1585 license = [ pkgs.lib.licenses.asl20 ];
1689 license = [ pkgs.lib.licenses.asl20 ];
1586 };
1690 };
1587 };
1691 };
1588 uWSGI = super.buildPythonPackage {
1692 uWSGI = super.buildPythonPackage {
1589 name = "uWSGI-2.0.11.2";
1693 name = "uWSGI-2.0.11.2";
1590 buildInputs = with self; [];
1694 buildInputs = with self; [];
1591 doCheck = false;
1695 doCheck = false;
1592 propagatedBuildInputs = with self; [];
1696 propagatedBuildInputs = with self; [];
1593 src = fetchurl {
1697 src = fetchurl {
1594 url = "https://pypi.python.org/packages/9b/78/918db0cfab0546afa580c1e565209c49aaf1476bbfe491314eadbe47c556/uwsgi-2.0.11.2.tar.gz";
1698 url = "https://pypi.python.org/packages/9b/78/918db0cfab0546afa580c1e565209c49aaf1476bbfe491314eadbe47c556/uwsgi-2.0.11.2.tar.gz";
1595 md5 = "1f02dcbee7f6f61de4b1fd68350cf16f";
1699 md5 = "1f02dcbee7f6f61de4b1fd68350cf16f";
1596 };
1700 };
1597 meta = {
1701 meta = {
1598 license = [ pkgs.lib.licenses.gpl2 ];
1702 license = [ pkgs.lib.licenses.gpl2 ];
1599 };
1703 };
1600 };
1704 };
1601 urllib3 = super.buildPythonPackage {
1705 urllib3 = super.buildPythonPackage {
1602 name = "urllib3-1.16";
1706 name = "urllib3-1.16";
1603 buildInputs = with self; [];
1707 buildInputs = with self; [];
1604 doCheck = false;
1708 doCheck = false;
1605 propagatedBuildInputs = with self; [];
1709 propagatedBuildInputs = with self; [];
1606 src = fetchurl {
1710 src = fetchurl {
1607 url = "https://pypi.python.org/packages/3b/f0/e763169124e3f5db0926bc3dbfcd580a105f9ca44cf5d8e6c7a803c9f6b5/urllib3-1.16.tar.gz";
1711 url = "https://pypi.python.org/packages/3b/f0/e763169124e3f5db0926bc3dbfcd580a105f9ca44cf5d8e6c7a803c9f6b5/urllib3-1.16.tar.gz";
1608 md5 = "fcaab1c5385c57deeb7053d3d7d81d59";
1712 md5 = "fcaab1c5385c57deeb7053d3d7d81d59";
1609 };
1713 };
1610 meta = {
1714 meta = {
1611 license = [ pkgs.lib.licenses.mit ];
1715 license = [ pkgs.lib.licenses.mit ];
1612 };
1716 };
1613 };
1717 };
1614 venusian = super.buildPythonPackage {
1718 venusian = super.buildPythonPackage {
1615 name = "venusian-1.0";
1719 name = "venusian-1.0";
1616 buildInputs = with self; [];
1720 buildInputs = with self; [];
1617 doCheck = false;
1721 doCheck = false;
1618 propagatedBuildInputs = with self; [];
1722 propagatedBuildInputs = with self; [];
1619 src = fetchurl {
1723 src = fetchurl {
1620 url = "https://pypi.python.org/packages/86/20/1948e0dfc4930ddde3da8c33612f6a5717c0b4bc28f591a5c5cf014dd390/venusian-1.0.tar.gz";
1724 url = "https://pypi.python.org/packages/86/20/1948e0dfc4930ddde3da8c33612f6a5717c0b4bc28f591a5c5cf014dd390/venusian-1.0.tar.gz";
1621 md5 = "dccf2eafb7113759d60c86faf5538756";
1725 md5 = "dccf2eafb7113759d60c86faf5538756";
1622 };
1726 };
1623 meta = {
1727 meta = {
1624 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1728 license = [ { fullName = "BSD-derived (http://www.repoze.org/LICENSE.txt)"; } ];
1625 };
1729 };
1626 };
1730 };
1627 waitress = super.buildPythonPackage {
1731 waitress = super.buildPythonPackage {
1628 name = "waitress-0.8.9";
1732 name = "waitress-0.8.9";
1629 buildInputs = with self; [];
1733 buildInputs = with self; [];
1630 doCheck = false;
1734 doCheck = false;
1631 propagatedBuildInputs = with self; [setuptools];
1735 propagatedBuildInputs = with self; [setuptools];
1632 src = fetchurl {
1736 src = fetchurl {
1633 url = "https://pypi.python.org/packages/ee/65/fc9dee74a909a1187ca51e4f15ad9c4d35476e4ab5813f73421505c48053/waitress-0.8.9.tar.gz";
1737 url = "https://pypi.python.org/packages/ee/65/fc9dee74a909a1187ca51e4f15ad9c4d35476e4ab5813f73421505c48053/waitress-0.8.9.tar.gz";
1634 md5 = "da3f2e62b3676be5dd630703a68e2a04";
1738 md5 = "da3f2e62b3676be5dd630703a68e2a04";
1635 };
1739 };
1636 meta = {
1740 meta = {
1637 license = [ pkgs.lib.licenses.zpt21 ];
1741 license = [ pkgs.lib.licenses.zpt21 ];
1638 };
1742 };
1639 };
1743 };
1744 wcwidth = super.buildPythonPackage {
1745 name = "wcwidth-0.1.7";
1746 buildInputs = with self; [];
1747 doCheck = false;
1748 propagatedBuildInputs = with self; [];
1749 src = fetchurl {
1750 url = "https://pypi.python.org/packages/55/11/e4a2bb08bb450fdbd42cc709dd40de4ed2c472cf0ccb9e64af22279c5495/wcwidth-0.1.7.tar.gz";
1751 md5 = "b3b6a0a08f0c8a34d1de8cf44150a4ad";
1752 };
1753 meta = {
1754 license = [ pkgs.lib.licenses.mit ];
1755 };
1756 };
1640 ws4py = super.buildPythonPackage {
1757 ws4py = super.buildPythonPackage {
1641 name = "ws4py-0.3.5";
1758 name = "ws4py-0.3.5";
1642 buildInputs = with self; [];
1759 buildInputs = with self; [];
1643 doCheck = false;
1760 doCheck = false;
1644 propagatedBuildInputs = with self; [];
1761 propagatedBuildInputs = with self; [];
1645 src = fetchurl {
1762 src = fetchurl {
1646 url = "https://pypi.python.org/packages/b6/4f/34af703be86939629479e74d6e650e39f3bd73b3b09212c34e5125764cbc/ws4py-0.3.5.zip";
1763 url = "https://pypi.python.org/packages/b6/4f/34af703be86939629479e74d6e650e39f3bd73b3b09212c34e5125764cbc/ws4py-0.3.5.zip";
1647 md5 = "a261b75c20b980e55ce7451a3576a867";
1764 md5 = "a261b75c20b980e55ce7451a3576a867";
1648 };
1765 };
1649 meta = {
1766 meta = {
1650 license = [ pkgs.lib.licenses.bsdOriginal ];
1767 license = [ pkgs.lib.licenses.bsdOriginal ];
1651 };
1768 };
1652 };
1769 };
1653 wsgiref = super.buildPythonPackage {
1770 wsgiref = super.buildPythonPackage {
1654 name = "wsgiref-0.1.2";
1771 name = "wsgiref-0.1.2";
1655 buildInputs = with self; [];
1772 buildInputs = with self; [];
1656 doCheck = false;
1773 doCheck = false;
1657 propagatedBuildInputs = with self; [];
1774 propagatedBuildInputs = with self; [];
1658 src = fetchurl {
1775 src = fetchurl {
1659 url = "https://pypi.python.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip";
1776 url = "https://pypi.python.org/packages/41/9e/309259ce8dff8c596e8c26df86dbc4e848b9249fd36797fd60be456f03fc/wsgiref-0.1.2.zip";
1660 md5 = "29b146e6ebd0f9fb119fe321f7bcf6cb";
1777 md5 = "29b146e6ebd0f9fb119fe321f7bcf6cb";
1661 };
1778 };
1662 meta = {
1779 meta = {
1663 license = [ { fullName = "PSF or ZPL"; } ];
1780 license = [ { fullName = "PSF or ZPL"; } ];
1664 };
1781 };
1665 };
1782 };
1666 zope.cachedescriptors = super.buildPythonPackage {
1783 zope.cachedescriptors = super.buildPythonPackage {
1667 name = "zope.cachedescriptors-4.0.0";
1784 name = "zope.cachedescriptors-4.0.0";
1668 buildInputs = with self; [];
1785 buildInputs = with self; [];
1669 doCheck = false;
1786 doCheck = false;
1670 propagatedBuildInputs = with self; [setuptools];
1787 propagatedBuildInputs = with self; [setuptools];
1671 src = fetchurl {
1788 src = fetchurl {
1672 url = "https://pypi.python.org/packages/40/33/694b6644c37f28553f4b9f20b3c3a20fb709a22574dff20b5bdffb09ecd5/zope.cachedescriptors-4.0.0.tar.gz";
1789 url = "https://pypi.python.org/packages/40/33/694b6644c37f28553f4b9f20b3c3a20fb709a22574dff20b5bdffb09ecd5/zope.cachedescriptors-4.0.0.tar.gz";
1673 md5 = "8d308de8c936792c8e758058fcb7d0f0";
1790 md5 = "8d308de8c936792c8e758058fcb7d0f0";
1674 };
1791 };
1675 meta = {
1792 meta = {
1676 license = [ pkgs.lib.licenses.zpt21 ];
1793 license = [ pkgs.lib.licenses.zpt21 ];
1677 };
1794 };
1678 };
1795 };
1679 zope.deprecation = super.buildPythonPackage {
1796 zope.deprecation = super.buildPythonPackage {
1680 name = "zope.deprecation-4.1.2";
1797 name = "zope.deprecation-4.1.2";
1681 buildInputs = with self; [];
1798 buildInputs = with self; [];
1682 doCheck = false;
1799 doCheck = false;
1683 propagatedBuildInputs = with self; [setuptools];
1800 propagatedBuildInputs = with self; [setuptools];
1684 src = fetchurl {
1801 src = fetchurl {
1685 url = "https://pypi.python.org/packages/c1/d3/3919492d5e57d8dd01b36f30b34fc8404a30577392b1eb817c303499ad20/zope.deprecation-4.1.2.tar.gz";
1802 url = "https://pypi.python.org/packages/c1/d3/3919492d5e57d8dd01b36f30b34fc8404a30577392b1eb817c303499ad20/zope.deprecation-4.1.2.tar.gz";
1686 md5 = "e9a663ded58f4f9f7881beb56cae2782";
1803 md5 = "e9a663ded58f4f9f7881beb56cae2782";
1687 };
1804 };
1688 meta = {
1805 meta = {
1689 license = [ pkgs.lib.licenses.zpt21 ];
1806 license = [ pkgs.lib.licenses.zpt21 ];
1690 };
1807 };
1691 };
1808 };
1692 zope.event = super.buildPythonPackage {
1809 zope.event = super.buildPythonPackage {
1693 name = "zope.event-4.0.3";
1810 name = "zope.event-4.0.3";
1694 buildInputs = with self; [];
1811 buildInputs = with self; [];
1695 doCheck = false;
1812 doCheck = false;
1696 propagatedBuildInputs = with self; [setuptools];
1813 propagatedBuildInputs = with self; [setuptools];
1697 src = fetchurl {
1814 src = fetchurl {
1698 url = "https://pypi.python.org/packages/c1/29/91ba884d7d6d96691df592e9e9c2bfa57a47040ec1ff47eff18c85137152/zope.event-4.0.3.tar.gz";
1815 url = "https://pypi.python.org/packages/c1/29/91ba884d7d6d96691df592e9e9c2bfa57a47040ec1ff47eff18c85137152/zope.event-4.0.3.tar.gz";
1699 md5 = "9a3780916332b18b8b85f522bcc3e249";
1816 md5 = "9a3780916332b18b8b85f522bcc3e249";
1700 };
1817 };
1701 meta = {
1818 meta = {
1702 license = [ pkgs.lib.licenses.zpt21 ];
1819 license = [ pkgs.lib.licenses.zpt21 ];
1703 };
1820 };
1704 };
1821 };
1705 zope.interface = super.buildPythonPackage {
1822 zope.interface = super.buildPythonPackage {
1706 name = "zope.interface-4.1.3";
1823 name = "zope.interface-4.1.3";
1707 buildInputs = with self; [];
1824 buildInputs = with self; [];
1708 doCheck = false;
1825 doCheck = false;
1709 propagatedBuildInputs = with self; [setuptools];
1826 propagatedBuildInputs = with self; [setuptools];
1710 src = fetchurl {
1827 src = fetchurl {
1711 url = "https://pypi.python.org/packages/9d/81/2509ca3c6f59080123c1a8a97125eb48414022618cec0e64eb1313727bfe/zope.interface-4.1.3.tar.gz";
1828 url = "https://pypi.python.org/packages/9d/81/2509ca3c6f59080123c1a8a97125eb48414022618cec0e64eb1313727bfe/zope.interface-4.1.3.tar.gz";
1712 md5 = "9ae3d24c0c7415deb249dd1a132f0f79";
1829 md5 = "9ae3d24c0c7415deb249dd1a132f0f79";
1713 };
1830 };
1714 meta = {
1831 meta = {
1715 license = [ pkgs.lib.licenses.zpt21 ];
1832 license = [ pkgs.lib.licenses.zpt21 ];
1716 };
1833 };
1717 };
1834 };
1718
1835
1719 ### Test requirements
1836 ### Test requirements
1720
1837
1721
1838 pytest-sugar = super.buildPythonPackage {
1839 name = "pytest-sugar-0.7.1";
1840 buildInputs = with self; [];
1841 doCheck = false;
1842 propagatedBuildInputs = with self; [pytest termcolor];
1843 src = fetchurl {
1844 url = "https://pypi.python.org/packages/03/97/05d988b4fa870e7373e8ee4582408543b9ca2bd35c3c67b569369c6f9c49/pytest-sugar-0.7.1.tar.gz";
1845 md5 = "7400f7c11f3d572b2c2a3b60352d35fe";
1846 };
1847 meta = {
1848 license = [ pkgs.lib.licenses.bsdOriginal ];
1849 };
1850 };
1851 termcolor = super.buildPythonPackage {
1852 name = "termcolor-1.1.0";
1853 buildInputs = with self; [];
1854 doCheck = false;
1855 propagatedBuildInputs = with self; [];
1856 src = fetchurl {
1857 url = "https://pypi.python.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz";
1858 md5 = "043e89644f8909d462fbbfa511c768df";
1859 };
1860 meta = {
1861 license = [ pkgs.lib.licenses.mit ];
1862 };
1863 };
1722 }
1864 }
@@ -1,12 +1,12 b''
1 [pytest]
1 [pytest]
2 testpaths = ./rhodecode
2 testpaths = ./rhodecode
3 pylons_config = test.ini
3 pylons_config = rhodecode/tests/rhodecode.ini
4 vcsserver_protocol = pyro4
4 vcsserver_protocol = http
5 vcsserver_config = rhodecode/tests/vcsserver.ini
5 vcsserver_config_pyro4 = rhodecode/tests/vcsserver_pyro4.ini
6 vcsserver_config_http = rhodecode/tests/vcsserver_pyramid.ini
6 vcsserver_config_http = rhodecode/tests/vcsserver_http.ini
7 norecursedirs = tests/scripts
7 norecursedirs = tests/scripts
8 addopts = -k "not _BaseTest"
8 addopts = -k "not _BaseTest"
9 markers =
9 markers =
10 vcs_operations: Mark tests depending on a running RhodeCode instance.
10 vcs_operations: Mark tests depending on a running RhodeCode instance.
11 xfail_backends: Mark tests as xfail for given backends.
11 xfail_backends: Mark tests as xfail for given backends.
12 skip_backends: Mark tests as skipped for given backends.
12 skip_backends: Mark tests as skipped for given backends.
@@ -1,150 +1,150 b''
1 Babel==1.3
1 Babel==1.3
2 Beaker==1.7.0
2 Beaker==1.7.0
3 Chameleon==2.24
3 CProfileV==1.0.6
4 CProfileV==1.0.6
4 FormEncode==1.2.4
5 FormEncode==1.2.4
5 Jinja2==2.7.3
6 Jinja2==2.7.3
6 Mako==1.0.1
7 Mako==1.0.1
7 Markdown==2.6.2
8 Markdown==2.6.2
8 MarkupSafe==0.23
9 MarkupSafe==0.23
9 MySQL-python==1.2.5
10 MySQL-python==1.2.5
10 Paste==2.0.2
11 Paste==2.0.2
11 PasteDeploy==1.5.2
12 PasteDeploy==1.5.2
12 PasteScript==1.7.5
13 PasteScript==1.7.5
13 Pygments==2.1.3
14 Pygments==2.1.3
15 pygments-markdown-lexer==0.1.0.dev39
14
16
15 # TODO: This version is not available on PyPI
17 # TODO: This version is not available on PyPI
16 # Pylons==1.0.2.dev20160108
18 # Pylons==1.0.2.dev20160108
17 Pylons==1.0.1
19 Pylons==1.0.1
18
20
19 # TODO: This version is not available, but newer ones are
21 # TODO: This version is not available, but newer ones are
20 # Pyro4==4.35
22 # Pyro4==4.35
21 Pyro4==4.41
23 Pyro4==4.41
22
24
23 # TODO: This should probably not be in here
25 # TODO: This should probably not be in here
24 # -e hg+https://johbo@code.rhodecode.com/johbo/rhodecode-fork@3a454bd1f17c0b2b2a951cf2b111e0320d7942a9#egg=RhodeCodeEnterprise-dev
26 # -e hg+https://johbo@code.rhodecode.com/johbo/rhodecode-fork@3a454bd1f17c0b2b2a951cf2b111e0320d7942a9#egg=RhodeCodeEnterprise-dev
25
27
26 Routes==1.13
28 Routes==1.13
27 SQLAlchemy==0.9.9
29 SQLAlchemy==0.9.9
28 Sphinx==1.2.2
30 Sphinx==1.2.2
29 Tempita==0.5.2
31 Tempita==0.5.2
30 URLObject==2.4.0
32 URLObject==2.4.0
31 WebError==0.10.3
33 WebError==0.10.3
32
34
33 # TODO: This is modified by us, needs a better integration. For now
35 # TODO: This is modified by us, needs a better integration. For now
34 # using the latest version before.
36 # using the latest version before.
35 # WebHelpers==1.3.dev20150807
37 # WebHelpers==1.3.dev20150807
36 WebHelpers==1.3
38 WebHelpers==1.3
37
39
38 WebHelpers2==2.0
40 WebHelpers2==2.0
39 WebOb==1.3.1
41 WebOb==1.3.1
40 WebTest==1.4.3
42 WebTest==1.4.3
41 Whoosh==2.7.0
43 Whoosh==2.7.0
42 alembic==0.8.4
44 alembic==0.8.4
43 amqplib==1.0.2
45 amqplib==1.0.2
44 anyjson==0.3.3
46 anyjson==0.3.3
45 appenlight-client==0.6.14
47 appenlight-client==0.6.14
46 authomatic==0.1.0.post1;
48 authomatic==0.1.0.post1;
47 backport-ipaddress==0.1
49 backport-ipaddress==0.1
48 bottle==0.12.8
50 bottle==0.12.8
49 bumpversion==0.5.3
51 bumpversion==0.5.3
50 celery==2.2.10
52 celery==2.2.10
51 channelstream==0.5.2
53 channelstream==0.5.2
52 click==5.1
54 click==5.1
53 colander==1.2
55 colander==1.2
54 configobj==5.0.6
56 configobj==5.0.6
55 cov-core==1.15.0
57 cov-core==1.15.0
56 coverage==3.7.1
58 coverage==3.7.1
57 cssselect==0.9.1
59 cssselect==0.9.1
58 decorator==3.4.2
60 decorator==3.4.2
59 deform==2.0a2
61 deform==2.0a2
60 docutils==0.12
62 docutils==0.12
61 dogpile.cache==0.6.1
63 dogpile.cache==0.6.1
62 dogpile.core==0.4.1
64 dogpile.core==0.4.1
63 dulwich==0.12.0
65 dulwich==0.12.0
64 ecdsa==0.11
66 ecdsa==0.11
65 flake8==2.4.1
66 future==0.14.3
67 future==0.14.3
67 futures==3.0.2
68 futures==3.0.2
68 gevent==1.1.1
69 gevent==1.1.1
69 gprof2dot==2015.12.1
70 gprof2dot==2015.12.1
70 greenlet==0.4.9
71 greenlet==0.4.9
71 gunicorn==19.6.0
72 gunicorn==19.6.0
72
73
73 # TODO: Needs subvertpy and blows up without Subversion headers,
74 # TODO: Needs subvertpy and blows up without Subversion headers,
74 # actually we should not need this for Enterprise at all.
75 # actually we should not need this for Enterprise at all.
75 # hgsubversion==1.8.2
76 # hgsubversion==1.8.2
76
77
77 gnureadline==6.3.3
78 gnureadline==6.3.3
78 infrae.cache==1.0.1
79 infrae.cache==1.0.1
79 invoke==0.13.0
80 invoke==0.13.0
80 ipdb==0.8
81 ipdb==0.10.1
81 ipython==3.1.0
82 ipython==5.1.0
82 iso8601==0.1.11
83 iso8601==0.1.11
83 itsdangerous==0.24
84 itsdangerous==0.24
84 kombu==1.5.1
85 kombu==1.5.1
85 lxml==3.4.4
86 lxml==3.4.4
86 mccabe==0.3
87 meld3==1.0.2
87 meld3==1.0.2
88 mock==1.0.1
88 mock==1.0.1
89 msgpack-python==0.4.6
89 msgpack-python==0.4.6
90 nose==1.3.6
90 nose==1.3.6
91 objgraph==2.0.0
91 objgraph==2.0.0
92 packaging==15.2
92 packaging==15.2
93 paramiko==1.15.1
93 paramiko==1.15.1
94 pep8==1.5.7
94 psutil==4.3.1
95 psutil==2.2.1
96 psycopg2==2.6.1
95 psycopg2==2.6.1
97 py==1.4.29
96 py==1.4.29
98 py-bcrypt==0.4
97 py-bcrypt==0.4
99 py-gfm==0.1.3
98 py-gfm==0.1.3
100 pycrypto==2.6.1
99 pycrypto==2.6.1
101 pycurl==7.19.5
100 pycurl==7.19.5
102 pyflakes==0.8.1
101 pyflakes==0.8.1
103 pyparsing==1.5.7
102 pyparsing==1.5.7
104 pyramid==1.6.1
103 pyramid==1.6.1
105 pyramid-beaker==0.8
104 pyramid-beaker==0.8
106 pyramid-debugtoolbar==2.4.2
105 pyramid-debugtoolbar==2.4.2
107 pyramid-jinja2==2.5
106 pyramid-jinja2==2.5
108 pyramid-mako==1.0.2
107 pyramid-mako==1.0.2
109 pysqlite==2.6.3
108 pysqlite==2.6.3
110 pytest==2.8.5
109 pytest==2.8.5
111 pytest-runner==2.7.1
110 pytest-runner==2.7.1
112 pytest-catchlog==1.2.2
111 pytest-catchlog==1.2.2
113 pytest-cov==1.8.1
112 pytest-cov==1.8.1
114 pytest-profiling==1.0.1
113 pytest-profiling==1.0.1
115 pytest-timeout==0.4
114 pytest-timeout==0.4
116 python-dateutil==1.5
115 python-dateutil==1.5
117 python-ldap==2.4.19
116 python-ldap==2.4.19
118 python-memcached==1.57
117 python-memcached==1.57
119 python-pam==1.8.2
118 python-pam==1.8.2
120 pytz==2015.4
119 pytz==2015.4
121 pyzmq==14.6.0
120 pyzmq==14.6.0
122
121
123 # TODO: This is not available in public
122 # TODO: This is not available in public
124 # rc-testdata==0.2.0
123 # rc-testdata==0.2.0
125
124
126 https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.10.2.zip#md5=d2af3985a1a32a678944d4d48870cb04
125 https://code.rhodecode.com/rhodecode-tools-ce/archive/v0.10.2.zip#md5=d2af3985a1a32a678944d4d48870cb04
127
126
128
127
129 recaptcha-client==1.0.6
128 recaptcha-client==1.0.6
130 repoze.lru==0.6
129 repoze.lru==0.6
131 requests==2.9.1
130 requests==2.9.1
132 serpent==1.12
131 serpent==1.12
133 setproctitle==1.1.8
132 setproctitle==1.1.8
134 setuptools==20.8.1
133 setuptools==20.8.1
135 setuptools-scm==1.11.0
134 setuptools-scm==1.11.0
136 simplejson==3.7.2
135 simplejson==3.7.2
137 six==1.9.0
136 six==1.9.0
138 subprocess32==3.2.6
137 subprocess32==3.2.6
139 supervisor==3.3.0
138 supervisor==3.3.0
140 transifex-client==0.10
139 transifex-client==0.10
141 translationstring==1.3
140 translationstring==1.3
142 trollius==1.0.4
141 trollius==1.0.4
143 uWSGI==2.0.11.2
142 uWSGI==2.0.11.2
143 urllib3==1.16
144 venusian==1.0
144 venusian==1.0
145 waitress==0.8.9
145 waitress==0.8.9
146 wsgiref==0.1.2
146 wsgiref==0.1.2
147 zope.cachedescriptors==4.0.0
147 zope.cachedescriptors==4.0.0
148 zope.deprecation==4.1.2
148 zope.deprecation==4.1.2
149 zope.event==4.0.3
149 zope.event==4.0.3
150 zope.interface==4.1.3
150 zope.interface==4.1.3
@@ -1,1 +1,1 b''
1 4.4.2 No newline at end of file
1 4.5.0 No newline at end of file
@@ -1,63 +1,63 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 """
21 """
22
22
23 RhodeCode, a web based repository management software
23 RhodeCode, a web based repository management software
24 versioning implementation: http://www.python.org/dev/peps/pep-0386/
24 versioning implementation: http://www.python.org/dev/peps/pep-0386/
25 """
25 """
26
26
27 import os
27 import os
28 import sys
28 import sys
29 import platform
29 import platform
30
30
31 VERSION = tuple(open(os.path.join(
31 VERSION = tuple(open(os.path.join(
32 os.path.dirname(__file__), 'VERSION')).read().split('.'))
32 os.path.dirname(__file__), 'VERSION')).read().split('.'))
33
33
34 BACKENDS = {
34 BACKENDS = {
35 'hg': 'Mercurial repository',
35 'hg': 'Mercurial repository',
36 'git': 'Git repository',
36 'git': 'Git repository',
37 'svn': 'Subversion repository',
37 'svn': 'Subversion repository',
38 }
38 }
39
39
40 CELERY_ENABLED = False
40 CELERY_ENABLED = False
41 CELERY_EAGER = False
41 CELERY_EAGER = False
42
42
43 # link to config for pylons
43 # link to config for pylons
44 CONFIG = {}
44 CONFIG = {}
45
45
46 # Populated with the settings dictionary from application init in
46 # Populated with the settings dictionary from application init in
47 # rhodecode.conf.environment.load_pyramid_environment
47 # rhodecode.conf.environment.load_pyramid_environment
48 PYRAMID_SETTINGS = {}
48 PYRAMID_SETTINGS = {}
49
49
50 # Linked module for extensions
50 # Linked module for extensions
51 EXTENSIONS = {}
51 EXTENSIONS = {}
52
52
53 __version__ = ('.'.join((str(each) for each in VERSION[:3])))
53 __version__ = ('.'.join((str(each) for each in VERSION[:3])))
54 __dbversion__ = 58 # defines current db version for migrations
54 __dbversion__ = 63 # defines current db version for migrations
55 __platform__ = platform.system()
55 __platform__ = platform.system()
56 __license__ = 'AGPLv3, and Commercial License'
56 __license__ = 'AGPLv3, and Commercial License'
57 __author__ = 'RhodeCode GmbH'
57 __author__ = 'RhodeCode GmbH'
58 __url__ = 'http://rhodecode.com'
58 __url__ = 'http://rhodecode.com'
59
59
60 is_windows = __platform__ in ['Windows']
60 is_windows = __platform__ in ['Windows']
61 is_unix = not is_windows
61 is_unix = not is_windows
62 is_test = False
62 is_test = False
63 disable_error_handler = False
63 disable_error_handler = False
@@ -1,40 +1,43 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2016-2016 RhodeCode GmbH
3 # Copyright (C) 2016-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21
21
22 from rhodecode.admin.navigation import NavigationRegistry
22 from rhodecode.admin.navigation import NavigationRegistry
23 from rhodecode.config.routing import ADMIN_PREFIX
23 from rhodecode.config.routing import ADMIN_PREFIX
24 from rhodecode.lib.utils2 import str2bool
24 from rhodecode.lib.utils2 import str2bool
25
25
26
26
27 def includeme(config):
27 def includeme(config):
28 settings = config.get_settings()
28 settings = config.get_settings()
29
29
30 # Create admin navigation registry and add it to the pyramid registry.
30 # Create admin navigation registry and add it to the pyramid registry.
31 labs_active = str2bool(settings.get('labs_settings_active', False))
31 labs_active = str2bool(settings.get('labs_settings_active', False))
32 navigation_registry = NavigationRegistry(labs_active=labs_active)
32 navigation_registry = NavigationRegistry(labs_active=labs_active)
33 config.registry.registerUtility(navigation_registry)
33 config.registry.registerUtility(navigation_registry)
34
34
35 config.add_route(
35 config.add_route(
36 name='admin_settings_open_source',
36 name='admin_settings_open_source',
37 pattern=ADMIN_PREFIX + '/settings/open_source')
37 pattern=ADMIN_PREFIX + '/settings/open_source')
38 config.add_route(
39 name='admin_settings_vcs_svn_generate_cfg',
40 pattern=ADMIN_PREFIX + '/settings/vcs/svn_generate_cfg')
38
41
39 # Scan module for configuration decorators.
42 # Scan module for configuration decorators.
40 config.scan()
43 config.scan()
@@ -1,55 +1,82 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2016-2016 RhodeCode GmbH
3 # Copyright (C) 2016-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import collections
21 import collections
22 import logging
22 import logging
23
23
24 from pylons import tmpl_context as c
24 from pylons import tmpl_context as c
25 from pyramid.view import view_config
25 from pyramid.view import view_config
26
26
27 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
27 from rhodecode.lib.auth import (
28 LoginRequired, HasPermissionAllDecorator, CSRFRequired)
28 from rhodecode.lib.utils import read_opensource_licenses
29 from rhodecode.lib.utils import read_opensource_licenses
30 from rhodecode.svn_support.utils import generate_mod_dav_svn_config
31 from rhodecode.translation import _
29
32
30 from .navigation import navigation_list
33 from .navigation import navigation_list
31
34
32
35
33 log = logging.getLogger(__name__)
36 log = logging.getLogger(__name__)
34
37
35
38
36 class AdminSettingsView(object):
39 class AdminSettingsView(object):
37
40
38 def __init__(self, context, request):
41 def __init__(self, context, request):
39 self.request = request
42 self.request = request
40 self.context = context
43 self.context = context
41 self.session = request.session
44 self.session = request.session
42 self._rhodecode_user = request.user
45 self._rhodecode_user = request.user
43
46
44 @LoginRequired()
47 @LoginRequired()
45 @HasPermissionAllDecorator('hg.admin')
48 @HasPermissionAllDecorator('hg.admin')
46 @view_config(
49 @view_config(
47 route_name='admin_settings_open_source', request_method='GET',
50 route_name='admin_settings_open_source', request_method='GET',
48 renderer='rhodecode:templates/admin/settings/settings.html')
51 renderer='rhodecode:templates/admin/settings/settings.html')
49 def open_source_licenses(self):
52 def open_source_licenses(self):
50 c.active = 'open_source'
53 c.active = 'open_source'
51 c.navlist = navigation_list(self.request)
54 c.navlist = navigation_list(self.request)
52 c.opensource_licenses = collections.OrderedDict(
55 c.opensource_licenses = collections.OrderedDict(
53 sorted(read_opensource_licenses().items(), key=lambda t: t[0]))
56 sorted(read_opensource_licenses().items(), key=lambda t: t[0]))
54
57
55 return {}
58 return {}
59
60 @LoginRequired()
61 @CSRFRequired()
62 @HasPermissionAllDecorator('hg.admin')
63 @view_config(
64 route_name='admin_settings_vcs_svn_generate_cfg',
65 request_method='POST', renderer='json')
66 def vcs_svn_generate_config(self):
67 try:
68 generate_mod_dav_svn_config(self.request.registry)
69 msg = {
70 'message': _('Apache configuration for Subversion generated.'),
71 'level': 'success',
72 }
73 except Exception:
74 log.exception(
75 'Exception while generating the Apache configuration for Subversion.')
76 msg = {
77 'message': _('Failed to generate the Apache configuration for Subversion.'),
78 'level': 'error',
79 }
80
81 data = {'message': msg}
82 return data
@@ -1,270 +1,350 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import json
21 import json
22
22
23 import mock
23 import mock
24 import pytest
24 import pytest
25
25
26 from rhodecode.lib.utils2 import safe_unicode
26 from rhodecode.lib.vcs import settings
27 from rhodecode.lib.vcs import settings
28 from rhodecode.model.meta import Session
27 from rhodecode.model.repo import RepoModel
29 from rhodecode.model.repo import RepoModel
30 from rhodecode.model.user import UserModel
28 from rhodecode.tests import TEST_USER_ADMIN_LOGIN
31 from rhodecode.tests import TEST_USER_ADMIN_LOGIN
29 from rhodecode.api.tests.utils import (
32 from rhodecode.api.tests.utils import (
30 build_data, api_call, assert_ok, assert_error, crash)
33 build_data, api_call, assert_ok, assert_error, crash)
31 from rhodecode.tests.fixture import Fixture
34 from rhodecode.tests.fixture import Fixture
32
35
33
36
34 fixture = Fixture()
37 fixture = Fixture()
35
38
36
39
37 @pytest.mark.usefixtures("testuser_api", "app")
40 @pytest.mark.usefixtures("testuser_api", "app")
38 class TestCreateRepo(object):
41 class TestCreateRepo(object):
39 def test_api_create_repo(self, backend):
42
40 repo_name = 'api-repo-1'
43 @pytest.mark.parametrize('given, expected_name, expected_exc', [
44 ('api repo-1', 'api-repo-1', False),
45 ('api-repo 1-ąć', 'api-repo-1-ąć', False),
46 (u'unicode-ąć', u'unicode-ąć', False),
47 ('some repo v1.2', 'some-repo-v1.2', False),
48 ('v2.0', 'v2.0', False),
49 ])
50 def test_api_create_repo(self, backend, given, expected_name, expected_exc):
51
41 id_, params = build_data(
52 id_, params = build_data(
42 self.apikey,
53 self.apikey,
43 'create_repo',
54 'create_repo',
44 repo_name=repo_name,
55 repo_name=given,
45 owner=TEST_USER_ADMIN_LOGIN,
56 owner=TEST_USER_ADMIN_LOGIN,
46 repo_type=backend.alias,
57 repo_type=backend.alias,
47 )
58 )
48 response = api_call(self.app, params)
59 response = api_call(self.app, params)
49
60
50 repo = RepoModel().get_by_repo_name(repo_name)
51
52 assert repo is not None
53 ret = {
61 ret = {
54 'msg': 'Created new repository `%s`' % (repo_name,),
62 'msg': 'Created new repository `%s`' % (expected_name,),
55 'success': True,
63 'success': True,
56 'task': None,
64 'task': None,
57 }
65 }
58 expected = ret
66 expected = ret
59 assert_ok(id_, expected, given=response.body)
67 assert_ok(id_, expected, given=response.body)
60
68
61 id_, params = build_data(self.apikey, 'get_repo', repoid=repo_name)
69 repo = RepoModel().get_by_repo_name(safe_unicode(expected_name))
70 assert repo is not None
71
72 id_, params = build_data(self.apikey, 'get_repo', repoid=expected_name)
62 response = api_call(self.app, params)
73 response = api_call(self.app, params)
63 body = json.loads(response.body)
74 body = json.loads(response.body)
64
75
65 assert body['result']['enable_downloads'] is False
76 assert body['result']['enable_downloads'] is False
66 assert body['result']['enable_locking'] is False
77 assert body['result']['enable_locking'] is False
67 assert body['result']['enable_statistics'] is False
78 assert body['result']['enable_statistics'] is False
68
79
69 fixture.destroy_repo(repo_name)
80 fixture.destroy_repo(safe_unicode(expected_name))
70
81
71 def test_api_create_restricted_repo_type(self, backend):
82 def test_api_create_restricted_repo_type(self, backend):
72 repo_name = 'api-repo-type-{0}'.format(backend.alias)
83 repo_name = 'api-repo-type-{0}'.format(backend.alias)
73 id_, params = build_data(
84 id_, params = build_data(
74 self.apikey,
85 self.apikey,
75 'create_repo',
86 'create_repo',
76 repo_name=repo_name,
87 repo_name=repo_name,
77 owner=TEST_USER_ADMIN_LOGIN,
88 owner=TEST_USER_ADMIN_LOGIN,
78 repo_type=backend.alias,
89 repo_type=backend.alias,
79 )
90 )
80 git_backend = settings.BACKENDS['git']
91 git_backend = settings.BACKENDS['git']
81 with mock.patch(
92 with mock.patch(
82 'rhodecode.lib.vcs.settings.BACKENDS', {'git': git_backend}):
93 'rhodecode.lib.vcs.settings.BACKENDS', {'git': git_backend}):
83 response = api_call(self.app, params)
94 response = api_call(self.app, params)
84
95
85 repo = RepoModel().get_by_repo_name(repo_name)
96 repo = RepoModel().get_by_repo_name(repo_name)
86
97
87 if backend.alias == 'git':
98 if backend.alias == 'git':
88 assert repo is not None
99 assert repo is not None
89 expected = {
100 expected = {
90 'msg': 'Created new repository `{0}`'.format(repo_name,),
101 'msg': 'Created new repository `{0}`'.format(repo_name,),
91 'success': True,
102 'success': True,
92 'task': None,
103 'task': None,
93 }
104 }
94 assert_ok(id_, expected, given=response.body)
105 assert_ok(id_, expected, given=response.body)
95 else:
106 else:
96 assert repo is None
107 assert repo is None
97
108
98 fixture.destroy_repo(repo_name)
109 fixture.destroy_repo(repo_name)
99
110
100 def test_api_create_repo_with_booleans(self, backend):
111 def test_api_create_repo_with_booleans(self, backend):
101 repo_name = 'api-repo-2'
112 repo_name = 'api-repo-2'
102 id_, params = build_data(
113 id_, params = build_data(
103 self.apikey,
114 self.apikey,
104 'create_repo',
115 'create_repo',
105 repo_name=repo_name,
116 repo_name=repo_name,
106 owner=TEST_USER_ADMIN_LOGIN,
117 owner=TEST_USER_ADMIN_LOGIN,
107 repo_type=backend.alias,
118 repo_type=backend.alias,
108 enable_statistics=True,
119 enable_statistics=True,
109 enable_locking=True,
120 enable_locking=True,
110 enable_downloads=True
121 enable_downloads=True
111 )
122 )
112 response = api_call(self.app, params)
123 response = api_call(self.app, params)
113
124
114 repo = RepoModel().get_by_repo_name(repo_name)
125 repo = RepoModel().get_by_repo_name(repo_name)
115
126
116 assert repo is not None
127 assert repo is not None
117 ret = {
128 ret = {
118 'msg': 'Created new repository `%s`' % (repo_name,),
129 'msg': 'Created new repository `%s`' % (repo_name,),
119 'success': True,
130 'success': True,
120 'task': None,
131 'task': None,
121 }
132 }
122 expected = ret
133 expected = ret
123 assert_ok(id_, expected, given=response.body)
134 assert_ok(id_, expected, given=response.body)
124
135
125 id_, params = build_data(self.apikey, 'get_repo', repoid=repo_name)
136 id_, params = build_data(self.apikey, 'get_repo', repoid=repo_name)
126 response = api_call(self.app, params)
137 response = api_call(self.app, params)
127 body = json.loads(response.body)
138 body = json.loads(response.body)
128
139
129 assert body['result']['enable_downloads'] is True
140 assert body['result']['enable_downloads'] is True
130 assert body['result']['enable_locking'] is True
141 assert body['result']['enable_locking'] is True
131 assert body['result']['enable_statistics'] is True
142 assert body['result']['enable_statistics'] is True
132
143
133 fixture.destroy_repo(repo_name)
144 fixture.destroy_repo(repo_name)
134
145
135 def test_api_create_repo_in_group(self, backend):
146 def test_api_create_repo_in_group(self, backend):
136 repo_group_name = 'my_gr'
147 repo_group_name = 'my_gr'
137 # create the parent
148 # create the parent
138 fixture.create_repo_group(repo_group_name)
149 fixture.create_repo_group(repo_group_name)
139
150
140 repo_name = '%s/api-repo-gr' % (repo_group_name,)
151 repo_name = '%s/api-repo-gr' % (repo_group_name,)
141 id_, params = build_data(
152 id_, params = build_data(
142 self.apikey, 'create_repo',
153 self.apikey, 'create_repo',
143 repo_name=repo_name,
154 repo_name=repo_name,
144 owner=TEST_USER_ADMIN_LOGIN,
155 owner=TEST_USER_ADMIN_LOGIN,
145 repo_type=backend.alias,)
156 repo_type=backend.alias,)
146 response = api_call(self.app, params)
157 response = api_call(self.app, params)
147 repo = RepoModel().get_by_repo_name(repo_name)
158 repo = RepoModel().get_by_repo_name(repo_name)
148 assert repo is not None
159 assert repo is not None
149 assert repo.group is not None
160 assert repo.group is not None
150
161
151 ret = {
162 ret = {
152 'msg': 'Created new repository `%s`' % (repo_name,),
163 'msg': 'Created new repository `%s`' % (repo_name,),
153 'success': True,
164 'success': True,
154 'task': None,
165 'task': None,
155 }
166 }
156 expected = ret
167 expected = ret
157 assert_ok(id_, expected, given=response.body)
168 assert_ok(id_, expected, given=response.body)
158 fixture.destroy_repo(repo_name)
169 fixture.destroy_repo(repo_name)
159 fixture.destroy_repo_group(repo_group_name)
170 fixture.destroy_repo_group(repo_group_name)
160
171
172 def test_create_repo_in_group_that_doesnt_exist(self, backend, user_util):
173 repo_group_name = 'fake_group'
174
175 repo_name = '%s/api-repo-gr' % (repo_group_name,)
176 id_, params = build_data(
177 self.apikey, 'create_repo',
178 repo_name=repo_name,
179 owner=TEST_USER_ADMIN_LOGIN,
180 repo_type=backend.alias,)
181 response = api_call(self.app, params)
182
183 expected = {'repo_group': 'Repository group `{}` does not exist'.format(
184 repo_group_name)}
185 assert_error(id_, expected, given=response.body)
186
161 def test_api_create_repo_unknown_owner(self, backend):
187 def test_api_create_repo_unknown_owner(self, backend):
162 repo_name = 'api-repo-2'
188 repo_name = 'api-repo-2'
163 owner = 'i-dont-exist'
189 owner = 'i-dont-exist'
164 id_, params = build_data(
190 id_, params = build_data(
165 self.apikey, 'create_repo',
191 self.apikey, 'create_repo',
166 repo_name=repo_name,
192 repo_name=repo_name,
167 owner=owner,
193 owner=owner,
168 repo_type=backend.alias)
194 repo_type=backend.alias)
169 response = api_call(self.app, params)
195 response = api_call(self.app, params)
170 expected = 'user `%s` does not exist' % (owner,)
196 expected = 'user `%s` does not exist' % (owner,)
171 assert_error(id_, expected, given=response.body)
197 assert_error(id_, expected, given=response.body)
172
198
173 def test_api_create_repo_dont_specify_owner(self, backend):
199 def test_api_create_repo_dont_specify_owner(self, backend):
174 repo_name = 'api-repo-3'
200 repo_name = 'api-repo-3'
175 id_, params = build_data(
201 id_, params = build_data(
176 self.apikey, 'create_repo',
202 self.apikey, 'create_repo',
177 repo_name=repo_name,
203 repo_name=repo_name,
178 repo_type=backend.alias)
204 repo_type=backend.alias)
179 response = api_call(self.app, params)
205 response = api_call(self.app, params)
180
206
181 repo = RepoModel().get_by_repo_name(repo_name)
207 repo = RepoModel().get_by_repo_name(repo_name)
182 assert repo is not None
208 assert repo is not None
183 ret = {
209 ret = {
184 'msg': 'Created new repository `%s`' % (repo_name,),
210 'msg': 'Created new repository `%s`' % (repo_name,),
185 'success': True,
211 'success': True,
186 'task': None,
212 'task': None,
187 }
213 }
188 expected = ret
214 expected = ret
189 assert_ok(id_, expected, given=response.body)
215 assert_ok(id_, expected, given=response.body)
190 fixture.destroy_repo(repo_name)
216 fixture.destroy_repo(repo_name)
191
217
192 def test_api_create_repo_by_non_admin(self, backend):
218 def test_api_create_repo_by_non_admin(self, backend):
193 repo_name = 'api-repo-4'
219 repo_name = 'api-repo-4'
194 id_, params = build_data(
220 id_, params = build_data(
195 self.apikey_regular, 'create_repo',
221 self.apikey_regular, 'create_repo',
196 repo_name=repo_name,
222 repo_name=repo_name,
197 repo_type=backend.alias)
223 repo_type=backend.alias)
198 response = api_call(self.app, params)
224 response = api_call(self.app, params)
199
225
200 repo = RepoModel().get_by_repo_name(repo_name)
226 repo = RepoModel().get_by_repo_name(repo_name)
201 assert repo is not None
227 assert repo is not None
202 ret = {
228 ret = {
203 'msg': 'Created new repository `%s`' % (repo_name,),
229 'msg': 'Created new repository `%s`' % (repo_name,),
204 'success': True,
230 'success': True,
205 'task': None,
231 'task': None,
206 }
232 }
207 expected = ret
233 expected = ret
208 assert_ok(id_, expected, given=response.body)
234 assert_ok(id_, expected, given=response.body)
209 fixture.destroy_repo(repo_name)
235 fixture.destroy_repo(repo_name)
210
236
211 def test_api_create_repo_by_non_admin_specify_owner(self, backend):
237 def test_api_create_repo_by_non_admin_specify_owner(self, backend):
212 repo_name = 'api-repo-5'
238 repo_name = 'api-repo-5'
213 owner = 'i-dont-exist'
239 owner = 'i-dont-exist'
214 id_, params = build_data(
240 id_, params = build_data(
215 self.apikey_regular, 'create_repo',
241 self.apikey_regular, 'create_repo',
216 repo_name=repo_name,
242 repo_name=repo_name,
217 repo_type=backend.alias,
243 repo_type=backend.alias,
218 owner=owner)
244 owner=owner)
219 response = api_call(self.app, params)
245 response = api_call(self.app, params)
220
246
221 expected = 'Only RhodeCode admin can specify `owner` param'
247 expected = 'Only RhodeCode super-admin can specify `owner` param'
222 assert_error(id_, expected, given=response.body)
248 assert_error(id_, expected, given=response.body)
223 fixture.destroy_repo(repo_name)
249 fixture.destroy_repo(repo_name)
224
250
251 def test_api_create_repo_by_non_admin_no_parent_group_perms(self, backend):
252 repo_group_name = 'no-access'
253 fixture.create_repo_group(repo_group_name)
254 repo_name = 'no-access/api-repo'
255
256 id_, params = build_data(
257 self.apikey_regular, 'create_repo',
258 repo_name=repo_name,
259 repo_type=backend.alias)
260 response = api_call(self.app, params)
261
262 expected = {'repo_group': 'Repository group `{}` does not exist'.format(
263 repo_group_name)}
264 assert_error(id_, expected, given=response.body)
265 fixture.destroy_repo_group(repo_group_name)
266 fixture.destroy_repo(repo_name)
267
268 def test_api_create_repo_non_admin_no_permission_to_create_to_root_level(
269 self, backend, user_util):
270
271 regular_user = user_util.create_user()
272 regular_user_api_key = regular_user.api_key
273
274 usr = UserModel().get_by_username(regular_user.username)
275 usr.inherit_default_permissions = False
276 Session().add(usr)
277
278 repo_name = backend.new_repo_name()
279 id_, params = build_data(
280 regular_user_api_key, 'create_repo',
281 repo_name=repo_name,
282 repo_type=backend.alias)
283 response = api_call(self.app, params)
284 expected = {
285 "repo_name": "You do not have the permission to "
286 "store repositories in the root location."}
287 assert_error(id_, expected, given=response.body)
288
225 def test_api_create_repo_exists(self, backend):
289 def test_api_create_repo_exists(self, backend):
226 repo_name = backend.repo_name
290 repo_name = backend.repo_name
227 id_, params = build_data(
291 id_, params = build_data(
228 self.apikey, 'create_repo',
292 self.apikey, 'create_repo',
229 repo_name=repo_name,
293 repo_name=repo_name,
230 owner=TEST_USER_ADMIN_LOGIN,
294 owner=TEST_USER_ADMIN_LOGIN,
231 repo_type=backend.alias,)
295 repo_type=backend.alias,)
232 response = api_call(self.app, params)
296 response = api_call(self.app, params)
233 expected = "repo `%s` already exist" % (repo_name,)
297 expected = {
298 'unique_repo_name': 'Repository with name `{}` already exists'.format(
299 repo_name)}
234 assert_error(id_, expected, given=response.body)
300 assert_error(id_, expected, given=response.body)
235
301
236 @mock.patch.object(RepoModel, 'create', crash)
302 @mock.patch.object(RepoModel, 'create', crash)
237 def test_api_create_repo_exception_occurred(self, backend):
303 def test_api_create_repo_exception_occurred(self, backend):
238 repo_name = 'api-repo-6'
304 repo_name = 'api-repo-6'
239 id_, params = build_data(
305 id_, params = build_data(
240 self.apikey, 'create_repo',
306 self.apikey, 'create_repo',
241 repo_name=repo_name,
307 repo_name=repo_name,
242 owner=TEST_USER_ADMIN_LOGIN,
308 owner=TEST_USER_ADMIN_LOGIN,
243 repo_type=backend.alias,)
309 repo_type=backend.alias,)
244 response = api_call(self.app, params)
310 response = api_call(self.app, params)
245 expected = 'failed to create repository `%s`' % (repo_name,)
311 expected = 'failed to create repository `%s`' % (repo_name,)
246 assert_error(id_, expected, given=response.body)
312 assert_error(id_, expected, given=response.body)
247
313
248 def test_create_repo_with_extra_slashes_in_name(self, backend, user_util):
314 @pytest.mark.parametrize('parent_group, dirty_name, expected_name', [
249 existing_repo_group = user_util.create_repo_group()
315 (None, 'foo bar x', 'foo-bar-x'),
250 dirty_repo_name = '//{}/repo_name//'.format(
316 ('foo', '/foo//bar x', 'foo/bar-x'),
251 existing_repo_group.group_name)
317 ('foo-bar', 'foo-bar //bar x', 'foo-bar/bar-x'),
252 cleaned_repo_name = '{}/repo_name'.format(
318 ])
253 existing_repo_group.group_name)
319 def test_create_repo_with_extra_slashes_in_name(
320 self, backend, parent_group, dirty_name, expected_name):
321
322 if parent_group:
323 gr = fixture.create_repo_group(parent_group)
324 assert gr.group_name == parent_group
254
325
255 id_, params = build_data(
326 id_, params = build_data(
256 self.apikey, 'create_repo',
327 self.apikey, 'create_repo',
257 repo_name=dirty_repo_name,
328 repo_name=dirty_name,
258 repo_type=backend.alias,
329 repo_type=backend.alias,
259 owner=TEST_USER_ADMIN_LOGIN,)
330 owner=TEST_USER_ADMIN_LOGIN,)
260 response = api_call(self.app, params)
331 response = api_call(self.app, params)
261 repo = RepoModel().get_by_repo_name(cleaned_repo_name)
332 expected ={
333 "msg": "Created new repository `{}`".format(expected_name),
334 "task": None,
335 "success": True
336 }
337 assert_ok(id_, expected, response.body)
338
339 repo = RepoModel().get_by_repo_name(expected_name)
262 assert repo is not None
340 assert repo is not None
263
341
264 expected = {
342 expected = {
265 'msg': 'Created new repository `%s`' % (cleaned_repo_name,),
343 'msg': 'Created new repository `%s`' % (expected_name,),
266 'success': True,
344 'success': True,
267 'task': None,
345 'task': None,
268 }
346 }
269 assert_ok(id_, expected, given=response.body)
347 assert_ok(id_, expected, given=response.body)
270 fixture.destroy_repo(cleaned_repo_name)
348 fixture.destroy_repo(expected_name)
349 if parent_group:
350 fixture.destroy_repo_group(parent_group)
@@ -1,199 +1,289 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2016 RhodeCode GmbH
3 # Copyright (C) 2010-2016 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 import mock
21 import mock
22 import pytest
22 import pytest
23
23
24 from rhodecode.model.meta import Session
24 from rhodecode.model.meta import Session
25 from rhodecode.model.repo_group import RepoGroupModel
25 from rhodecode.model.repo_group import RepoGroupModel
26 from rhodecode.model.user import UserModel
26 from rhodecode.model.user import UserModel
27 from rhodecode.tests import TEST_USER_ADMIN_LOGIN
27 from rhodecode.tests import TEST_USER_ADMIN_LOGIN
28 from rhodecode.api.tests.utils import (
28 from rhodecode.api.tests.utils import (
29 build_data, api_call, assert_ok, assert_error, crash)
29 build_data, api_call, assert_ok, assert_error, crash)
30 from rhodecode.tests.fixture import Fixture
30 from rhodecode.tests.fixture import Fixture
31
31
32
32
33 fixture = Fixture()
33 fixture = Fixture()
34
34
35
35
36 @pytest.mark.usefixtures("testuser_api", "app")
36 @pytest.mark.usefixtures("testuser_api", "app")
37 class TestCreateRepoGroup(object):
37 class TestCreateRepoGroup(object):
38 def test_api_create_repo_group(self):
38 def test_api_create_repo_group(self):
39 repo_group_name = 'api-repo-group'
39 repo_group_name = 'api-repo-group'
40
40
41 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
41 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
42 assert repo_group is None
42 assert repo_group is None
43
43
44 id_, params = build_data(
44 id_, params = build_data(
45 self.apikey, 'create_repo_group',
45 self.apikey, 'create_repo_group',
46 group_name=repo_group_name,
46 group_name=repo_group_name,
47 owner=TEST_USER_ADMIN_LOGIN,)
47 owner=TEST_USER_ADMIN_LOGIN,)
48 response = api_call(self.app, params)
48 response = api_call(self.app, params)
49
49
50 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
50 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
51 assert repo_group is not None
51 assert repo_group is not None
52 ret = {
52 ret = {
53 'msg': 'Created new repo group `%s`' % (repo_group_name,),
53 'msg': 'Created new repo group `%s`' % (repo_group_name,),
54 'repo_group': repo_group.get_api_data()
54 'repo_group': repo_group.get_api_data()
55 }
55 }
56 expected = ret
56 expected = ret
57 assert_ok(id_, expected, given=response.body)
57 try:
58 fixture.destroy_repo_group(repo_group_name)
58 assert_ok(id_, expected, given=response.body)
59
59 finally:
60 def test_api_create_repo_group_regular_user(self):
60 fixture.destroy_repo_group(repo_group_name)
61 repo_group_name = 'api-repo-group'
62
63 usr = UserModel().get_by_username(self.TEST_USER_LOGIN)
64 usr.inherit_default_permissions = False
65 Session().add(usr)
66 UserModel().grant_perm(
67 self.TEST_USER_LOGIN, 'hg.repogroup.create.true')
68 Session().commit()
69
70 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
71 assert repo_group is None
72
73 id_, params = build_data(
74 self.apikey_regular, 'create_repo_group',
75 group_name=repo_group_name,
76 owner=TEST_USER_ADMIN_LOGIN,)
77 response = api_call(self.app, params)
78
79 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
80 assert repo_group is not None
81 ret = {
82 'msg': 'Created new repo group `%s`' % (repo_group_name,),
83 'repo_group': repo_group.get_api_data()
84 }
85 expected = ret
86 assert_ok(id_, expected, given=response.body)
87 fixture.destroy_repo_group(repo_group_name)
88 UserModel().revoke_perm(
89 self.TEST_USER_LOGIN, 'hg.repogroup.create.true')
90 usr = UserModel().get_by_username(self.TEST_USER_LOGIN)
91 usr.inherit_default_permissions = True
92 Session().add(usr)
93 Session().commit()
94
95 def test_api_create_repo_group_regular_user_no_permission(self):
96 repo_group_name = 'api-repo-group'
97
98 id_, params = build_data(
99 self.apikey_regular, 'create_repo_group',
100 group_name=repo_group_name,
101 owner=TEST_USER_ADMIN_LOGIN,)
102 response = api_call(self.app, params)
103
104 expected = "Access was denied to this resource."
105 assert_error(id_, expected, given=response.body)
106
61
107 def test_api_create_repo_group_in_another_group(self):
62 def test_api_create_repo_group_in_another_group(self):
108 repo_group_name = 'api-repo-group'
63 repo_group_name = 'api-repo-group'
109
64
110 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
65 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
111 assert repo_group is None
66 assert repo_group is None
112 # create the parent
67 # create the parent
113 fixture.create_repo_group(repo_group_name)
68 fixture.create_repo_group(repo_group_name)
114
69
115 full_repo_group_name = repo_group_name+'/'+repo_group_name
70 full_repo_group_name = repo_group_name+'/'+repo_group_name
116 id_, params = build_data(
71 id_, params = build_data(
117 self.apikey, 'create_repo_group',
72 self.apikey, 'create_repo_group',
118 group_name=full_repo_group_name,
73 group_name=full_repo_group_name,
119 owner=TEST_USER_ADMIN_LOGIN,
74 owner=TEST_USER_ADMIN_LOGIN,
120 copy_permissions=True)
75 copy_permissions=True)
121 response = api_call(self.app, params)
76 response = api_call(self.app, params)
122
77
123 repo_group = RepoGroupModel.cls.get_by_group_name(full_repo_group_name)
78 repo_group = RepoGroupModel.cls.get_by_group_name(full_repo_group_name)
124 assert repo_group is not None
79 assert repo_group is not None
125 ret = {
80 ret = {
126 'msg': 'Created new repo group `%s`' % (full_repo_group_name,),
81 'msg': 'Created new repo group `%s`' % (full_repo_group_name,),
127 'repo_group': repo_group.get_api_data()
82 'repo_group': repo_group.get_api_data()
128 }
83 }
129 expected = ret
84 expected = ret
130 assert_ok(id_, expected, given=response.body)
85 try:
131 fixture.destroy_repo_group(full_repo_group_name)
86 assert_ok(id_, expected, given=response.body)
132 fixture.destroy_repo_group(repo_group_name)
87 finally:
88 fixture.destroy_repo_group(full_repo_group_name)
89 fixture.destroy_repo_group(repo_group_name)
133
90
134 def test_api_create_repo_group_in_another_group_not_existing(self):
91 def test_api_create_repo_group_in_another_group_not_existing(self):
135 repo_group_name = 'api-repo-group-no'
92 repo_group_name = 'api-repo-group-no'
136
93
137 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
94 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
138 assert repo_group is None
95 assert repo_group is None
139
96
140 full_repo_group_name = repo_group_name+'/'+repo_group_name
97 full_repo_group_name = repo_group_name+'/'+repo_group_name
141 id_, params = build_data(
98 id_, params = build_data(
142 self.apikey, 'create_repo_group',
99 self.apikey, 'create_repo_group',
143 group_name=full_repo_group_name,
100 group_name=full_repo_group_name,
144 owner=TEST_USER_ADMIN_LOGIN,
101 owner=TEST_USER_ADMIN_LOGIN,
145 copy_permissions=True)
102 copy_permissions=True)
146 response = api_call(self.app, params)
103 response = api_call(self.app, params)
147 expected = 'repository group `%s` does not exist' % (repo_group_name,)
104 expected = {
105 'repo_group':
106 'Parent repository group `{}` does not exist'.format(
107 repo_group_name)}
148 assert_error(id_, expected, given=response.body)
108 assert_error(id_, expected, given=response.body)
149
109
150 def test_api_create_repo_group_that_exists(self):
110 def test_api_create_repo_group_that_exists(self):
151 repo_group_name = 'api-repo-group'
111 repo_group_name = 'api-repo-group'
152
112
153 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
113 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
154 assert repo_group is None
114 assert repo_group is None
155
115
156 fixture.create_repo_group(repo_group_name)
116 fixture.create_repo_group(repo_group_name)
157 id_, params = build_data(
117 id_, params = build_data(
158 self.apikey, 'create_repo_group',
118 self.apikey, 'create_repo_group',
159 group_name=repo_group_name,
119 group_name=repo_group_name,
160 owner=TEST_USER_ADMIN_LOGIN,)
120 owner=TEST_USER_ADMIN_LOGIN,)
161 response = api_call(self.app, params)
121 response = api_call(self.app, params)
162 expected = 'repo group `%s` already exist' % (repo_group_name,)
122 expected = {
123 'unique_repo_group_name':
124 'Repository group with name `{}` already exists'.format(
125 repo_group_name)}
126 try:
127 assert_error(id_, expected, given=response.body)
128 finally:
129 fixture.destroy_repo_group(repo_group_name)
130
131 def test_api_create_repo_group_regular_user_wit_root_location_perms(
132 self, user_util):
133 regular_user = user_util.create_user()
134 regular_user_api_key = regular_user.api_key
135
136 repo_group_name = 'api-repo-group-by-regular-user'
137
138 usr = UserModel().get_by_username(regular_user.username)
139 usr.inherit_default_permissions = False
140 Session().add(usr)
141
142 UserModel().grant_perm(
143 regular_user.username, 'hg.repogroup.create.true')
144 Session().commit()
145
146 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
147 assert repo_group is None
148
149 id_, params = build_data(
150 regular_user_api_key, 'create_repo_group',
151 group_name=repo_group_name)
152 response = api_call(self.app, params)
153
154 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
155 assert repo_group is not None
156 expected = {
157 'msg': 'Created new repo group `%s`' % (repo_group_name,),
158 'repo_group': repo_group.get_api_data()
159 }
160 try:
161 assert_ok(id_, expected, given=response.body)
162 finally:
163 fixture.destroy_repo_group(repo_group_name)
164
165 def test_api_create_repo_group_regular_user_with_admin_perms_to_parent(
166 self, user_util):
167
168 repo_group_name = 'api-repo-group-parent'
169
170 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
171 assert repo_group is None
172 # create the parent
173 fixture.create_repo_group(repo_group_name)
174
175 # user perms
176 regular_user = user_util.create_user()
177 regular_user_api_key = regular_user.api_key
178
179 usr = UserModel().get_by_username(regular_user.username)
180 usr.inherit_default_permissions = False
181 Session().add(usr)
182
183 RepoGroupModel().grant_user_permission(
184 repo_group_name, regular_user.username, 'group.admin')
185 Session().commit()
186
187 full_repo_group_name = repo_group_name + '/' + repo_group_name
188 id_, params = build_data(
189 regular_user_api_key, 'create_repo_group',
190 group_name=full_repo_group_name)
191 response = api_call(self.app, params)
192
193 repo_group = RepoGroupModel.cls.get_by_group_name(full_repo_group_name)
194 assert repo_group is not None
195 expected = {
196 'msg': 'Created new repo group `{}`'.format(full_repo_group_name),
197 'repo_group': repo_group.get_api_data()
198 }
199 try:
200 assert_ok(id_, expected, given=response.body)
201 finally:
202 fixture.destroy_repo_group(full_repo_group_name)
203 fixture.destroy_repo_group(repo_group_name)
204
205 def test_api_create_repo_group_regular_user_no_permission_to_create_to_root_level(self):
206 repo_group_name = 'api-repo-group'
207
208 id_, params = build_data(
209 self.apikey_regular, 'create_repo_group',
210 group_name=repo_group_name)
211 response = api_call(self.app, params)
212
213 expected = {
214 'repo_group':
215 u'You do not have the permission to store '
216 u'repository groups in the root location.'}
163 assert_error(id_, expected, given=response.body)
217 assert_error(id_, expected, given=response.body)
164 fixture.destroy_repo_group(repo_group_name)
218
219 def test_api_create_repo_group_regular_user_no_parent_group_perms(self):
220 repo_group_name = 'api-repo-group-regular-user'
221
222 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
223 assert repo_group is None
224 # create the parent
225 fixture.create_repo_group(repo_group_name)
226
227 full_repo_group_name = repo_group_name+'/'+repo_group_name
228
229 id_, params = build_data(
230 self.apikey_regular, 'create_repo_group',
231 group_name=full_repo_group_name)
232 response = api_call(self.app, params)
233
234 expected = {
235 'repo_group':
236 'Parent repository group `{}` does not exist'.format(
237 repo_group_name)}
238 try:
239 assert_error(id_, expected, given=response.body)
240 finally:
241 fixture.destroy_repo_group(repo_group_name)
242
243 def test_api_create_repo_group_regular_user_no_permission_to_specify_owner(
244 self):
245 repo_group_name = 'api-repo-group'
246
247 id_, params = build_data(
248 self.apikey_regular, 'create_repo_group',
249 group_name=repo_group_name,
250 owner=TEST_USER_ADMIN_LOGIN,)
251 response = api_call(self.app, params)
252
253 expected = "Only RhodeCode super-admin can specify `owner` param"
254 assert_error(id_, expected, given=response.body)
165
255
166 @mock.patch.object(RepoGroupModel, 'create', crash)
256 @mock.patch.object(RepoGroupModel, 'create', crash)
167 def test_api_create_repo_group_exception_occurred(self):
257 def test_api_create_repo_group_exception_occurred(self):
168 repo_group_name = 'api-repo-group'
258 repo_group_name = 'api-repo-group'
169
259
170 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
260 repo_group = RepoGroupModel.cls.get_by_group_name(repo_group_name)
171 assert repo_group is None
261 assert repo_group is None
172
262
173 id_, params = build_data(
263 id_, params = build_data(
174 self.apikey, 'create_repo_group',
264 self.apikey, 'create_repo_group',
175 group_name=repo_group_name,
265 group_name=repo_group_name,
176 owner=TEST_USER_ADMIN_LOGIN,)
266 owner=TEST_USER_ADMIN_LOGIN,)
177 response = api_call(self.app, params)
267 response = api_call(self.app, params)
178 expected = 'failed to create repo group `%s`' % (repo_group_name,)
268 expected = 'failed to create repo group `%s`' % (repo_group_name,)
179 assert_error(id_, expected, given=response.body)
269 assert_error(id_, expected, given=response.body)
180
270
181 def test_create_group_with_extra_slashes_in_name(self, user_util):
271 def test_create_group_with_extra_slashes_in_name(self, user_util):
182 existing_repo_group = user_util.create_repo_group()
272 existing_repo_group = user_util.create_repo_group()
183 dirty_group_name = '//{}//group2//'.format(
273 dirty_group_name = '//{}//group2//'.format(
184 existing_repo_group.group_name)
274 existing_repo_group.group_name)
185 cleaned_group_name = '{}/group2'.format(
275 cleaned_group_name = '{}/group2'.format(
186 existing_repo_group.group_name)
276 existing_repo_group.group_name)
187
277
188 id_, params = build_data(
278 id_, params = build_data(
189 self.apikey, 'create_repo_group',
279 self.apikey, 'create_repo_group',
190 group_name=dirty_group_name,
280 group_name=dirty_group_name,
191 owner=TEST_USER_ADMIN_LOGIN,)
281 owner=TEST_USER_ADMIN_LOGIN,)
192 response = api_call(self.app, params)
282 response = api_call(self.app, params)
193 repo_group = RepoGroupModel.cls.get_by_group_name(cleaned_group_name)
283 repo_group = RepoGroupModel.cls.get_by_group_name(cleaned_group_name)
194 expected = {
284 expected = {
195 'msg': 'Created new repo group `%s`' % (cleaned_group_name,),
285 'msg': 'Created new repo group `%s`' % (cleaned_group_name,),
196 'repo_group': repo_group.get_api_data()
286 'repo_group': repo_group.get_api_data()
197 }
287 }
198 assert_ok(id_, expected, given=response.body)
288 assert_ok(id_, expected, given=response.body)
199 fixture.destroy_repo_group(cleaned_group_name)
289 fixture.destroy_repo_group(cleaned_group_name)
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now