Show More
@@ -15,7 +15,8 b' This file can also be run as a script to' | |||||
15 | """ |
|
15 | """ | |
16 | import sys |
|
16 | import sys | |
17 | DEFAULT_VERSION = "0.6c9" |
|
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 | md5_data = { |
|
21 | md5_data = { | |
21 | 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', |
|
22 | 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', | |
@@ -54,25 +55,27 b' md5_data = {' | |||||
54 | 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', |
|
55 | 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', | |
55 | } |
|
56 | } | |
56 |
|
57 | |||
57 |
import |
|
58 | import os | |
58 | try: from hashlib import md5 |
|
59 | ||
59 | except ImportError: from md5 import md5 |
|
60 | try: | |
|
61 | from hashlib import md5 | |||
|
62 | except ImportError: | |||
|
63 | from md5 import md5 | |||
|
64 | ||||
60 |
|
65 | |||
61 | def _validate_md5(egg_name, data): |
|
66 | def _validate_md5(egg_name, data): | |
62 | if egg_name in md5_data: |
|
67 | if egg_name in md5_data: | |
63 | digest = md5(data).hexdigest() |
|
68 | digest = md5(data).hexdigest() | |
64 | if digest != md5_data[egg_name]: |
|
69 | if digest != md5_data[egg_name]: | |
65 | print >>sys.stderr, ( |
|
70 | print >> sys.stderr, ( | |
66 | "md5 validation of %s failed! (Possible download problem?)" |
|
71 | "md5 validation of %s failed! (Possible download problem?)" | |
67 | % egg_name |
|
72 | % egg_name) | |
68 | ) |
|
|||
69 | sys.exit(2) |
|
73 | sys.exit(2) | |
70 | return data |
|
74 | return data | |
71 |
|
75 | |||
72 | def use_setuptools( |
|
76 | ||
73 |
|
|
77 | def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, | |
74 | download_delay=15 |
|
78 | to_dir=os.curdir, download_delay=15): | |
75 | ): |
|
|||
76 | """Automatically find/download setuptools and make it available on sys.path |
|
79 | """Automatically find/download setuptools and make it available on sys.path | |
77 |
|
80 | |||
78 | `version` should be a valid setuptools version number that is available |
|
81 | `version` should be a valid setuptools version number that is available | |
@@ -84,25 +87,29 b' def use_setuptools(' | |||||
84 | this routine will print a message to ``sys.stderr`` and raise SystemExit in |
|
87 | this routine will print a message to ``sys.stderr`` and raise SystemExit in | |
85 | an attempt to abort the calling script. |
|
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 | def do_download(): |
|
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 | sys.path.insert(0, egg) |
|
96 | sys.path.insert(0, egg) | |
91 | import setuptools; setuptools.bootstrap_install_from = egg |
|
97 | import setuptools | |
|
98 | setuptools.bootstrap_install_from = egg | |||
92 | try: |
|
99 | try: | |
93 | import pkg_resources |
|
100 | import pkg_resources | |
94 | except ImportError: |
|
101 | except ImportError: | |
95 | return do_download() |
|
102 | return do_download() | |
96 | try: |
|
103 | try: | |
97 |
pkg_resources.require("setuptools>="+version) |
|
104 | pkg_resources.require("setuptools>=" + version) | |
|
105 | return | |||
98 | except pkg_resources.VersionConflict, e: |
|
106 | except pkg_resources.VersionConflict, e: | |
99 | if was_imported: |
|
107 | if was_imported: | |
100 | print >>sys.stderr, ( |
|
108 | print >> sys.stderr, ( | |
101 | "The required version of setuptools (>=%s) is not available, and\n" |
|
109 | "The required version of setuptools (>=%s) is not available, and\n" | |
102 | "can't be installed while this script is running. Please install\n" |
|
110 | "can't be installed while this script is running. Please install\n" | |
103 | " a more recent version first, using 'easy_install -U setuptools'." |
|
111 | " a more recent version first, using 'easy_install -U setuptools'." | |
104 | "\n\n(Currently using %r)" |
|
112 | "\n\n(Currently using %r)") % (version, e.args[0]) | |
105 | ) % (version, e.args[0]) |
|
|||
106 | sys.exit(2) |
|
113 | sys.exit(2) | |
107 | else: |
|
114 | else: | |
108 | del pkg_resources, sys.modules['pkg_resources'] # reload ok |
|
115 | del pkg_resources, sys.modules['pkg_resources'] # reload ok | |
@@ -110,19 +117,20 b' def use_setuptools(' | |||||
110 | except pkg_resources.DistributionNotFound: |
|
117 | except pkg_resources.DistributionNotFound: | |
111 | return do_download() |
|
118 | return do_download() | |
112 |
|
119 | |||
113 | def download_setuptools( |
|
120 | ||
114 |
|
|
121 | def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, | |
115 | delay = 15 |
|
122 | to_dir=os.curdir, delay=15): | |
116 | ): |
|
|||
117 | """Download setuptools from a specified location and return its filename |
|
123 | """Download setuptools from a specified location and return its filename | |
118 |
|
124 | |||
119 | `version` should be a valid setuptools version number that is available |
|
125 | `version` should be a valid setuptools version number that is available | |
120 | as an egg for download under the `download_base` URL (which should end |
|
126 | as an egg for download under the `download_base` URL (which should end | |
121 | with a '/'). `to_dir` is the directory where the egg will be downloaded. |
|
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 |
|
131 | import urllib2 | |
125 | egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) |
|
132 | ||
|
133 | egg_name = "setuptools-%s-py%s.egg" % (version, sys.version[:3]) | |||
126 | url = download_base + egg_name |
|
134 | url = download_base + egg_name | |
127 | saveto = os.path.join(to_dir, egg_name) |
|
135 | saveto = os.path.join(to_dir, egg_name) | |
128 | src = dst = None |
|
136 | src = dst = None | |
@@ -144,54 +152,24 b' I will start the download in %d seconds.' | |||||
144 |
|
152 | |||
145 | and place it in this directory before rerunning this script.) |
|
153 | and place it in this directory before rerunning this script.) | |
146 | ---------------------------------------------------------------------------""", |
|
154 | ---------------------------------------------------------------------------""", | |
147 | version, download_base, delay, url |
|
155 | version, download_base, delay, url) | |
148 |
|
|
156 | from time import sleep | |
|
157 | sleep(delay) | |||
149 | log.warn("Downloading %s", url) |
|
158 | log.warn("Downloading %s", url) | |
150 | src = urllib2.urlopen(url) |
|
159 | src = urllib2.urlopen(url) | |
151 | # Read/write all in one block, so we don't create a corrupt file |
|
160 | # Read/write all in one block, so we don't create a corrupt file | |
152 | # if the download is interrupted. |
|
161 | # if the download is interrupted. | |
153 | data = _validate_md5(egg_name, src.read()) |
|
162 | data = _validate_md5(egg_name, src.read()) | |
154 |
dst = open(saveto,"wb") |
|
163 | dst = open(saveto, "wb") | |
|
164 | dst.write(data) | |||
155 | finally: |
|
165 | finally: | |
156 |
if src: |
|
166 | if src: | |
157 |
|
|
167 | src.close() | |
|
168 | if dst: | |||
|
169 | dst.close() | |||
158 | return os.path.realpath(saveto) |
|
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 | def main(argv, version=DEFAULT_VERSION): |
|
173 | def main(argv, version=DEFAULT_VERSION): | |
196 | """Install or upgrade setuptools and EasyInstall""" |
|
174 | """Install or upgrade setuptools and EasyInstall""" | |
197 | try: |
|
175 | try: | |
@@ -200,21 +178,21 b' def main(argv, version=DEFAULT_VERSION):' | |||||
200 | egg = None |
|
178 | egg = None | |
201 | try: |
|
179 | try: | |
202 | egg = download_setuptools(version, delay=0) |
|
180 | egg = download_setuptools(version, delay=0) | |
203 | sys.path.insert(0,egg) |
|
181 | sys.path.insert(0, egg) | |
204 | from setuptools.command.easy_install import main |
|
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 | finally: |
|
184 | finally: | |
207 | if egg and os.path.exists(egg): |
|
185 | if egg and os.path.exists(egg): | |
208 | os.unlink(egg) |
|
186 | os.unlink(egg) | |
209 | else: |
|
187 | else: | |
210 | if setuptools.__version__ == '0.0.1': |
|
188 | if setuptools.__version__ == '0.0.1': | |
211 | print >>sys.stderr, ( |
|
189 | print >> sys.stderr, ( | |
212 | "You have an obsolete version of setuptools installed. Please\n" |
|
190 | "You have an obsolete version of setuptools installed. Please\n" | |
213 |
"remove it from your system entirely before rerunning |
|
191 | "remove it from your system entirely before rerunning" | |
214 | ) |
|
192 | " this script.") | |
215 | sys.exit(2) |
|
193 | sys.exit(2) | |
216 |
|
194 | |||
217 | req = "setuptools>="+version |
|
195 | req = "setuptools>=" + version | |
218 | import pkg_resources |
|
196 | import pkg_resources | |
219 | try: |
|
197 | try: | |
220 | pkg_resources.require(req) |
|
198 | pkg_resources.require(req) | |
@@ -223,16 +201,17 b' def main(argv, version=DEFAULT_VERSION):' | |||||
223 | from setuptools.command.easy_install import main |
|
201 | from setuptools.command.easy_install import main | |
224 | except ImportError: |
|
202 | except ImportError: | |
225 | from easy_install import main |
|
203 | from easy_install import main | |
226 | main(list(argv)+[download_setuptools(delay=0)]) |
|
204 | main(list(argv) + [download_setuptools(delay=0)]) | |
227 | sys.exit(0) # try to force an exit |
|
205 | sys.exit(0) # try to force an exit | |
228 | else: |
|
206 | else: | |
229 | if argv: |
|
207 | if argv: | |
230 | from setuptools.command.easy_install import main |
|
208 | from setuptools.command.easy_install import main | |
231 | main(argv) |
|
209 | main(argv) | |
232 | else: |
|
210 | else: | |
233 | print "Setuptools version",version,"or greater has been installed." |
|
211 | print "Setuptools version", version, "or greater has been installed." | |
234 | print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' |
|
212 | print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' | |
235 |
|
213 | |||
|
214 | ||||
236 | def update_md5(filenames): |
|
215 | def update_md5(filenames): | |
237 | """Update our built-in md5 registry""" |
|
216 | """Update our built-in md5 registry""" | |
238 |
|
217 | |||
@@ -240,7 +219,7 b' def update_md5(filenames):' | |||||
240 |
|
219 | |||
241 | for name in filenames: |
|
220 | for name in filenames: | |
242 | base = os.path.basename(name) |
|
221 | base = os.path.basename(name) | |
243 | f = open(name,'rb') |
|
222 | f = open(name, 'rb') | |
244 | md5_data[base] = md5(f.read()).hexdigest() |
|
223 | md5_data[base] = md5(f.read()).hexdigest() | |
245 | f.close() |
|
224 | f.close() | |
246 |
|
225 | |||
@@ -250,21 +229,23 b' def update_md5(filenames):' | |||||
250 |
|
229 | |||
251 | import inspect |
|
230 | import inspect | |
252 | srcfile = inspect.getsourcefile(sys.modules[__name__]) |
|
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 | match = re.search("\nmd5_data = {\n([^}]+)}", src) |
|
236 | match = re.search("\nmd5_data = {\n([^}]+)}", src) | |
256 | if not match: |
|
237 | if not match: | |
257 | print >>sys.stderr, "Internal error!" |
|
238 | print >> sys.stderr, "Internal error!" | |
258 | sys.exit(2) |
|
239 | sys.exit(2) | |
259 |
|
240 | |||
260 | src = src[:match.start(1)] + repl + src[match.end(1):] |
|
241 | src = src[:match.start(1)] + repl + src[match.end(1):] | |
261 | f = open(srcfile,'w') |
|
242 | f = open(srcfile, 'w') | |
262 | f.write(src) |
|
243 | f.write(src) | |
263 | f.close() |
|
244 | f.close() | |
264 |
|
245 | |||
265 |
|
246 | |||
266 | if __name__=='__main__': |
|
247 | if __name__ == '__main__': | |
267 | if len(sys.argv)>2 and sys.argv[1]=='--md5update': |
|
248 | if len(sys.argv) > 2 and sys.argv[1] == '--md5update': | |
268 | update_md5(sys.argv[2:]) |
|
249 | update_md5(sys.argv[2:]) | |
269 | else: |
|
250 | else: | |
270 | main(sys.argv[1:]) |
|
251 | main(sys.argv[1:]) |
@@ -49,10 +49,9 b" package_data = {'rhodecode': ['i18n/*/LC" | |||||
49 |
|
49 | |||
50 | description = ('Mercurial repository browser/management with ' |
|
50 | description = ('Mercurial repository browser/management with ' | |
51 | 'build in push/pull server and full text search') |
|
51 | 'build in push/pull server and full text search') | |
52 |
keywords = ' '.join |
|
52 | keywords = ' '.join(['rhodecode', 'rhodiumcode', 'mercurial', 'git', | |
53 | 'repository management', 'hgweb replacement' |
|
53 | 'repository management', 'hgweb replacement' | |
54 | 'hgwebdir', 'gitweb replacement', 'serving hgweb', |
|
54 | 'hgwebdir', 'gitweb replacement', 'serving hgweb', ]) | |
55 | ]) |
|
|||
56 | #long description |
|
55 | #long description | |
57 | try: |
|
56 | try: | |
58 | readme_file = 'README.rst' |
|
57 | readme_file = 'README.rst' |
General Comments 0
You need to be logged in to leave comments.
Login now