Show More
@@ -15,7 +15,8 b' This file can also be run as a script to' | |||
|
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', |
@@ -54,25 +55,27 b' md5_data = {' | |||
|
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 |
@@ -84,25 +87,29 b' def use_setuptools(' | |||
|
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 |
@@ -110,19 +117,20 b' def use_setuptools(' | |||
|
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 |
@@ -144,54 +152,24 b' I will start the download in %d seconds.' | |||
|
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: |
@@ -200,21 +178,21 b' def main(argv, version=DEFAULT_VERSION):' | |||
|
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) |
@@ -223,16 +201,17 b' def main(argv, version=DEFAULT_VERSION):' | |||
|
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 | |
@@ -240,7 +219,7 b' def update_md5(filenames):' | |||
|
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 | |
@@ -250,21 +229,23 b' def update_md5(filenames):' | |||
|
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:]) |
@@ -49,10 +49,9 b" package_data = {'rhodecode': ['i18n/*/LC" | |||
|
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' |
General Comments 0
You need to be logged in to leave comments.
Login now