Show More
@@ -1,270 +1,251 b'' | |||
|
1 | 1 | #!python |
|
2 | 2 | """Bootstrap setuptools installation |
|
3 | 3 | |
|
4 | 4 | If you want to use setuptools in your package's setup.py, just include this |
|
5 | 5 | file in the same directory with it, and add this to the top of your setup.py:: |
|
6 | 6 | |
|
7 | 7 | from ez_setup import use_setuptools |
|
8 | 8 | use_setuptools() |
|
9 | 9 | |
|
10 | 10 | If you want to require a specific version of setuptools, set a download |
|
11 | 11 | mirror, or use an alternate download directory, you can do so by supplying |
|
12 | 12 | the appropriate options to ``use_setuptools()``. |
|
13 | 13 | |
|
14 | 14 | This file can also be run as a script to install or upgrade setuptools. |
|
15 | 15 | """ |
|
16 | 16 | import sys |
|
17 | 17 | DEFAULT_VERSION = "0.6c9" |
|
18 |
DEFAULT_URL |
|
|
18 | DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" \ | |
|
19 | % sys.version[:3] | |
|
19 | 20 | |
|
20 | 21 | md5_data = { |
|
21 | 22 | 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', |
|
22 | 23 | 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', |
|
23 | 24 | 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', |
|
24 | 25 | 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', |
|
25 | 26 | 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', |
|
26 | 27 | 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', |
|
27 | 28 | 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', |
|
28 | 29 | 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', |
|
29 | 30 | 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', |
|
30 | 31 | 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', |
|
31 | 32 | 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', |
|
32 | 33 | 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', |
|
33 | 34 | 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', |
|
34 | 35 | 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', |
|
35 | 36 | 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', |
|
36 | 37 | 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', |
|
37 | 38 | 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', |
|
38 | 39 | 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', |
|
39 | 40 | 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', |
|
40 | 41 | 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', |
|
41 | 42 | 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', |
|
42 | 43 | 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', |
|
43 | 44 | 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', |
|
44 | 45 | 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', |
|
45 | 46 | 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', |
|
46 | 47 | 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', |
|
47 | 48 | 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', |
|
48 | 49 | 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', |
|
49 | 50 | 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', |
|
50 | 51 | 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', |
|
51 | 52 | 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03', |
|
52 | 53 | 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a', |
|
53 | 54 | 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6', |
|
54 | 55 | 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', |
|
55 | 56 | } |
|
56 | 57 | |
|
57 |
import |
|
|
58 | try: from hashlib import md5 | |
|
59 | except ImportError: from md5 import md5 | |
|
58 | import os | |
|
59 | ||
|
60 | try: | |
|
61 | from hashlib import md5 | |
|
62 | except ImportError: | |
|
63 | from md5 import md5 | |
|
64 | ||
|
60 | 65 | |
|
61 | 66 | def _validate_md5(egg_name, data): |
|
62 | 67 | if egg_name in md5_data: |
|
63 | 68 | digest = md5(data).hexdigest() |
|
64 | 69 | if digest != md5_data[egg_name]: |
|
65 | print >>sys.stderr, ( | |
|
70 | print >> sys.stderr, ( | |
|
66 | 71 | "md5 validation of %s failed! (Possible download problem?)" |
|
67 | % egg_name | |
|
68 | ) | |
|
72 | % egg_name) | |
|
69 | 73 | sys.exit(2) |
|
70 | 74 | return data |
|
71 | 75 | |
|
72 | def use_setuptools( | |
|
73 |
|
|
|
74 | download_delay=15 | |
|
75 | ): | |
|
76 | ||
|
77 | def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, | |
|
78 | to_dir=os.curdir, download_delay=15): | |
|
76 | 79 | """Automatically find/download setuptools and make it available on sys.path |
|
77 | 80 | |
|
78 | 81 | `version` should be a valid setuptools version number that is available |
|
79 | 82 | as an egg for download under the `download_base` URL (which should end with |
|
80 | 83 | a '/'). `to_dir` is the directory where setuptools will be downloaded, if |
|
81 | 84 | it is not already available. If `download_delay` is specified, it should |
|
82 | 85 | be the number of seconds that will be paused before initiating a download, |
|
83 | 86 | should one be required. If an older version of setuptools is installed, |
|
84 | 87 | this routine will print a message to ``sys.stderr`` and raise SystemExit in |
|
85 | 88 | an attempt to abort the calling script. |
|
86 | 89 | """ |
|
87 |
was_imported = 'pkg_resources' in sys.modules or 'setuptools' in |
|
|
90 | was_imported = 'pkg_resources' in sys.modules or ('setuptools' in | |
|
91 | sys.modules) | |
|
92 | ||
|
88 | 93 | def do_download(): |
|
89 |
egg = download_setuptools(version, download_base, to_dir, |
|
|
94 | egg = download_setuptools(version, download_base, to_dir, | |
|
95 | download_delay) | |
|
90 | 96 | sys.path.insert(0, egg) |
|
91 | import setuptools; setuptools.bootstrap_install_from = egg | |
|
97 | import setuptools | |
|
98 | setuptools.bootstrap_install_from = egg | |
|
92 | 99 | try: |
|
93 | 100 | import pkg_resources |
|
94 | 101 | except ImportError: |
|
95 | 102 | return do_download() |
|
96 | 103 | try: |
|
97 |
pkg_resources.require("setuptools>="+version) |
|
|
104 | pkg_resources.require("setuptools>=" + version) | |
|
105 | return | |
|
98 | 106 | except pkg_resources.VersionConflict, e: |
|
99 | 107 | if was_imported: |
|
100 | print >>sys.stderr, ( | |
|
108 | print >> sys.stderr, ( | |
|
101 | 109 | "The required version of setuptools (>=%s) is not available, and\n" |
|
102 | 110 | "can't be installed while this script is running. Please install\n" |
|
103 | 111 | " a more recent version first, using 'easy_install -U setuptools'." |
|
104 | "\n\n(Currently using %r)" | |
|
105 | ) % (version, e.args[0]) | |
|
112 | "\n\n(Currently using %r)") % (version, e.args[0]) | |
|
106 | 113 | sys.exit(2) |
|
107 | 114 | else: |
|
108 | 115 | del pkg_resources, sys.modules['pkg_resources'] # reload ok |
|
109 | 116 | return do_download() |
|
110 | 117 | except pkg_resources.DistributionNotFound: |
|
111 | 118 | return do_download() |
|
112 | 119 | |
|
113 | def download_setuptools( | |
|
114 |
|
|
|
115 | delay = 15 | |
|
116 | ): | |
|
120 | ||
|
121 | def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, | |
|
122 | to_dir=os.curdir, delay=15): | |
|
117 | 123 | """Download setuptools from a specified location and return its filename |
|
118 | 124 | |
|
119 | 125 | `version` should be a valid setuptools version number that is available |
|
120 | 126 | as an egg for download under the `download_base` URL (which should end |
|
121 | 127 | with a '/'). `to_dir` is the directory where the egg will be downloaded. |
|
122 |
`delay` is the number of seconds to pause before an actual download |
|
|
128 | `delay` is the number of seconds to pause before an actual download | |
|
129 | attempt. | |
|
123 | 130 | """ |
|
124 |
import urllib2 |
|
|
125 | egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) | |
|
131 | import urllib2 | |
|
132 | ||
|
133 | egg_name = "setuptools-%s-py%s.egg" % (version, sys.version[:3]) | |
|
126 | 134 | url = download_base + egg_name |
|
127 | 135 | saveto = os.path.join(to_dir, egg_name) |
|
128 | 136 | src = dst = None |
|
129 | 137 | if not os.path.exists(saveto): # Avoid repeated downloads |
|
130 | 138 | try: |
|
131 | 139 | from distutils import log |
|
132 | 140 | if delay: |
|
133 | 141 | log.warn(""" |
|
134 | 142 | --------------------------------------------------------------------------- |
|
135 | 143 | This script requires setuptools version %s to run (even to display |
|
136 | 144 | help). I will attempt to download it for you (from |
|
137 | 145 | %s), but |
|
138 | 146 | you may need to enable firewall access for this script first. |
|
139 | 147 | I will start the download in %d seconds. |
|
140 | 148 | |
|
141 | 149 | (Note: if this machine does not have network access, please obtain the file |
|
142 | 150 | |
|
143 | 151 | %s |
|
144 | 152 | |
|
145 | 153 | and place it in this directory before rerunning this script.) |
|
146 | 154 | ---------------------------------------------------------------------------""", |
|
147 | version, download_base, delay, url | |
|
148 |
|
|
|
155 | version, download_base, delay, url) | |
|
156 | from time import sleep | |
|
157 | sleep(delay) | |
|
149 | 158 | log.warn("Downloading %s", url) |
|
150 | 159 | src = urllib2.urlopen(url) |
|
151 | 160 | # Read/write all in one block, so we don't create a corrupt file |
|
152 | 161 | # if the download is interrupted. |
|
153 | 162 | data = _validate_md5(egg_name, src.read()) |
|
154 |
dst = open(saveto,"wb") |
|
|
163 | dst = open(saveto, "wb") | |
|
164 | dst.write(data) | |
|
155 | 165 | finally: |
|
156 |
if src: |
|
|
157 |
|
|
|
166 | if src: | |
|
167 | src.close() | |
|
168 | if dst: | |
|
169 | dst.close() | |
|
158 | 170 | return os.path.realpath(saveto) |
|
159 | 171 | |
|
160 | 172 | |
|
161 | ||
|
162 | ||
|
163 | ||
|
164 | ||
|
165 | ||
|
166 | ||
|
167 | ||
|
168 | ||
|
169 | ||
|
170 | ||
|
171 | ||
|
172 | ||
|
173 | ||
|
174 | ||
|
175 | ||
|
176 | ||
|
177 | ||
|
178 | ||
|
179 | ||
|
180 | ||
|
181 | ||
|
182 | ||
|
183 | ||
|
184 | ||
|
185 | ||
|
186 | ||
|
187 | ||
|
188 | ||
|
189 | ||
|
190 | ||
|
191 | ||
|
192 | ||
|
193 | ||
|
194 | ||
|
195 | 173 | def main(argv, version=DEFAULT_VERSION): |
|
196 | 174 | """Install or upgrade setuptools and EasyInstall""" |
|
197 | 175 | try: |
|
198 | 176 | import setuptools |
|
199 | 177 | except ImportError: |
|
200 | 178 | egg = None |
|
201 | 179 | try: |
|
202 | 180 | egg = download_setuptools(version, delay=0) |
|
203 | sys.path.insert(0,egg) | |
|
181 | sys.path.insert(0, egg) | |
|
204 | 182 | from setuptools.command.easy_install import main |
|
205 | return main(list(argv)+[egg]) # we're done here | |
|
183 | return main(list(argv) + [egg]) # we're done here | |
|
206 | 184 | finally: |
|
207 | 185 | if egg and os.path.exists(egg): |
|
208 | 186 | os.unlink(egg) |
|
209 | 187 | else: |
|
210 | 188 | if setuptools.__version__ == '0.0.1': |
|
211 | print >>sys.stderr, ( | |
|
189 | print >> sys.stderr, ( | |
|
212 | 190 | "You have an obsolete version of setuptools installed. Please\n" |
|
213 |
"remove it from your system entirely before rerunning |
|
|
214 | ) | |
|
191 | "remove it from your system entirely before rerunning" | |
|
192 | " this script.") | |
|
215 | 193 | sys.exit(2) |
|
216 | 194 | |
|
217 | req = "setuptools>="+version | |
|
195 | req = "setuptools>=" + version | |
|
218 | 196 | import pkg_resources |
|
219 | 197 | try: |
|
220 | 198 | pkg_resources.require(req) |
|
221 | 199 | except pkg_resources.VersionConflict: |
|
222 | 200 | try: |
|
223 | 201 | from setuptools.command.easy_install import main |
|
224 | 202 | except ImportError: |
|
225 | 203 | from easy_install import main |
|
226 | main(list(argv)+[download_setuptools(delay=0)]) | |
|
204 | main(list(argv) + [download_setuptools(delay=0)]) | |
|
227 | 205 | sys.exit(0) # try to force an exit |
|
228 | 206 | else: |
|
229 | 207 | if argv: |
|
230 | 208 | from setuptools.command.easy_install import main |
|
231 | 209 | main(argv) |
|
232 | 210 | else: |
|
233 | print "Setuptools version",version,"or greater has been installed." | |
|
211 | print "Setuptools version", version, "or greater has been installed." | |
|
234 | 212 | print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' |
|
235 | 213 | |
|
214 | ||
|
236 | 215 | def update_md5(filenames): |
|
237 | 216 | """Update our built-in md5 registry""" |
|
238 | 217 | |
|
239 | 218 | import re |
|
240 | 219 | |
|
241 | 220 | for name in filenames: |
|
242 | 221 | base = os.path.basename(name) |
|
243 | f = open(name,'rb') | |
|
222 | f = open(name, 'rb') | |
|
244 | 223 | md5_data[base] = md5(f.read()).hexdigest() |
|
245 | 224 | f.close() |
|
246 | 225 | |
|
247 | 226 | data = [" %r: %r,\n" % it for it in md5_data.items()] |
|
248 | 227 | data.sort() |
|
249 | 228 | repl = "".join(data) |
|
250 | 229 | |
|
251 | 230 | import inspect |
|
252 | 231 | srcfile = inspect.getsourcefile(sys.modules[__name__]) |
|
253 |
f = open(srcfile, 'rb') |
|
|
232 | f = open(srcfile, 'rb') | |
|
233 | src = f.read() | |
|
234 | f.close() | |
|
254 | 235 | |
|
255 | 236 | match = re.search("\nmd5_data = {\n([^}]+)}", src) |
|
256 | 237 | if not match: |
|
257 | print >>sys.stderr, "Internal error!" | |
|
238 | print >> sys.stderr, "Internal error!" | |
|
258 | 239 | sys.exit(2) |
|
259 | 240 | |
|
260 | 241 | src = src[:match.start(1)] + repl + src[match.end(1):] |
|
261 | f = open(srcfile,'w') | |
|
242 | f = open(srcfile, 'w') | |
|
262 | 243 | f.write(src) |
|
263 | 244 | f.close() |
|
264 | 245 | |
|
265 | 246 | |
|
266 | if __name__=='__main__': | |
|
267 | if len(sys.argv)>2 and sys.argv[1]=='--md5update': | |
|
247 | if __name__ == '__main__': | |
|
248 | if len(sys.argv) > 2 and sys.argv[1] == '--md5update': | |
|
268 | 249 | update_md5(sys.argv[2:]) |
|
269 | 250 | else: |
|
270 | 251 | main(sys.argv[1:]) |
@@ -1,120 +1,119 b'' | |||
|
1 | 1 | import sys |
|
2 | 2 | from rhodecode import get_version |
|
3 | 3 | from rhodecode import __platform__ |
|
4 | 4 | |
|
5 | 5 | py_version = sys.version_info |
|
6 | 6 | |
|
7 | 7 | if py_version < (2, 5): |
|
8 | 8 | raise Exception('RhodeCode requires python 2.5 or later') |
|
9 | 9 | |
|
10 | 10 | requirements = [ |
|
11 | 11 | "Pylons==1.0.0", |
|
12 | 12 | "WebHelpers>=1.2", |
|
13 | 13 | "SQLAlchemy>=0.6.6", |
|
14 | 14 | "Mako>=0.4.0", |
|
15 | 15 | "vcs>=0.2.0", |
|
16 | 16 | "pygments>=1.4", |
|
17 | 17 | "mercurial>=1.8.1", |
|
18 | 18 | "whoosh>=1.8.0", |
|
19 | 19 | "celery>=2.2.5", |
|
20 | 20 | "babel", |
|
21 | 21 | "python-dateutil>=1.5.0,<2.0.0", |
|
22 | 22 | ] |
|
23 | 23 | |
|
24 | 24 | classifiers = ['Development Status :: 4 - Beta', |
|
25 | 25 | 'Environment :: Web Environment', |
|
26 | 26 | 'Framework :: Pylons', |
|
27 | 27 | 'Intended Audience :: Developers', |
|
28 | 28 | 'License :: OSI Approved :: BSD License', |
|
29 | 29 | 'Operating System :: OS Independent', |
|
30 | 30 | 'Programming Language :: Python', |
|
31 | 31 | 'Programming Language :: Python :: 2.5', |
|
32 | 32 | 'Programming Language :: Python :: 2.6', |
|
33 | 33 | 'Programming Language :: Python :: 2.7', ] |
|
34 | 34 | |
|
35 | 35 | if py_version < (2, 6): |
|
36 | 36 | requirements.append("simplejson") |
|
37 | 37 | requirements.append("pysqlite") |
|
38 | 38 | |
|
39 | 39 | if __platform__ in ('Linux', 'Darwin'): |
|
40 | 40 | requirements.append("py-bcrypt") |
|
41 | 41 | |
|
42 | 42 | |
|
43 | 43 | #additional files from project that goes somewhere in the filesystem |
|
44 | 44 | #relative to sys.prefix |
|
45 | 45 | data_files = [] |
|
46 | 46 | |
|
47 | 47 | #additional files that goes into package itself |
|
48 | 48 | package_data = {'rhodecode': ['i18n/*/LC_MESSAGES/*.mo', ], } |
|
49 | 49 | |
|
50 | 50 | description = ('Mercurial repository browser/management with ' |
|
51 | 51 | 'build in push/pull server and full text search') |
|
52 |
keywords = ' '.join |
|
|
52 | keywords = ' '.join(['rhodecode', 'rhodiumcode', 'mercurial', 'git', | |
|
53 | 53 | 'repository management', 'hgweb replacement' |
|
54 | 'hgwebdir', 'gitweb replacement', 'serving hgweb', | |
|
55 | ]) | |
|
54 | 'hgwebdir', 'gitweb replacement', 'serving hgweb', ]) | |
|
56 | 55 | #long description |
|
57 | 56 | try: |
|
58 | 57 | readme_file = 'README.rst' |
|
59 | 58 | changelog_file = 'docs/changelog.rst' |
|
60 | 59 | long_description = open(readme_file).read() + '\n\n' + \ |
|
61 | 60 | open(changelog_file).read() |
|
62 | 61 | |
|
63 | 62 | except IOError, err: |
|
64 | 63 | sys.stderr.write("[WARNING] Cannot find file specified as " |
|
65 | 64 | "long_description (%s)\n or changelog (%s) skipping that file" \ |
|
66 | 65 | % (readme_file, changelog_file)) |
|
67 | 66 | long_description = description |
|
68 | 67 | |
|
69 | 68 | |
|
70 | 69 | try: |
|
71 | 70 | from setuptools import setup, find_packages |
|
72 | 71 | except ImportError: |
|
73 | 72 | from ez_setup import use_setuptools |
|
74 | 73 | use_setuptools() |
|
75 | 74 | from setuptools import setup, find_packages |
|
76 | 75 | #packages |
|
77 | 76 | packages = find_packages(exclude=['ez_setup']) |
|
78 | 77 | |
|
79 | 78 | setup( |
|
80 | 79 | name='RhodeCode', |
|
81 | 80 | version=get_version(), |
|
82 | 81 | description=description, |
|
83 | 82 | long_description=long_description, |
|
84 | 83 | keywords=keywords, |
|
85 | 84 | license='GPLv3', |
|
86 | 85 | author='Marcin Kuzminski', |
|
87 | 86 | author_email='marcin@python-works.com', |
|
88 | 87 | url='http://rhodecode.org', |
|
89 | 88 | install_requires=requirements, |
|
90 | 89 | classifiers=classifiers, |
|
91 | 90 | setup_requires=["PasteScript>=1.6.3"], |
|
92 | 91 | data_files=data_files, |
|
93 | 92 | packages=packages, |
|
94 | 93 | include_package_data=True, |
|
95 | 94 | test_suite='nose.collector', |
|
96 | 95 | package_data=package_data, |
|
97 | 96 | message_extractors={'rhodecode': [ |
|
98 | 97 | ('**.py', 'python', None), |
|
99 | 98 | ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}), |
|
100 | 99 | ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}), |
|
101 | 100 | ('public/**', 'ignore', None)]}, |
|
102 | 101 | zip_safe=False, |
|
103 | 102 | paster_plugins=['PasteScript', 'Pylons'], |
|
104 | 103 | entry_points=""" |
|
105 | 104 | [paste.app_factory] |
|
106 | 105 | main = rhodecode.config.middleware:make_app |
|
107 | 106 | |
|
108 | 107 | [paste.app_install] |
|
109 | 108 | main = pylons.util:PylonsInstaller |
|
110 | 109 | |
|
111 | 110 | [paste.global_paster_command] |
|
112 | 111 | make-index = rhodecode.lib.indexers:MakeIndex |
|
113 | 112 | upgrade-db = rhodecode.lib.dbmigrate:UpgradeDb |
|
114 | 113 | celeryd=rhodecode.lib.celerypylons.commands:CeleryDaemonCommand |
|
115 | 114 | celerybeat=rhodecode.lib.celerypylons.commands:CeleryBeatCommand |
|
116 | 115 | camqadm=rhodecode.lib.celerypylons.commands:CAMQPAdminCommand |
|
117 | 116 | celeryev=rhodecode.lib.celerypylons.commands:CeleryEventCommand |
|
118 | 117 | |
|
119 | 118 | """, |
|
120 | 119 | ) |
General Comments 0
You need to be logged in to leave comments.
Login now