Merge lp:~logan/ubuntu/raring/distribute/0.6.34 into lp:ubuntu/raring/distribute
- Raring (13.04)
- 0.6.34
- Merge into raring
Proposed by
Logan Rosen
Status: | Merged |
---|---|
Merged at revision: | 21 |
Proposed branch: | lp:~logan/ubuntu/raring/distribute/0.6.34 |
Merge into: | lp:ubuntu/raring/distribute |
Diff against target: |
3110 lines (+1218/-554) 31 files modified
CHANGES.txt (+78/-36) CONTRIBUTORS.txt (+1/-0) PKG-INFO (+310/-143) README.txt (+3/-3) _markerlib/markers.py (+25/-14) debian/changelog (+6/-0) distribute.egg-info/PKG-INFO (+310/-143) distribute_setup.py (+8/-3) docs/build/html/_sources/setuptools.txt (+31/-4) docs/conf.py (+2/-2) docs/setuptools.txt (+31/-4) pkg_resources.py (+25/-29) release.py (+1/-1) setup.py (+33/-8) setuptools/command/develop.py (+3/-1) setuptools/command/easy_install.py (+10/-2) setuptools/command/egg_info.py (+27/-3) setuptools/command/sdist.py (+6/-1) setuptools/command/upload.py (+3/-2) setuptools/command/upload_docs.py (+4/-7) setuptools/dist.py (+5/-0) setuptools/package_index.py (+55/-3) setuptools/sandbox.py (+4/-1) setuptools/tests/doctest.py (+6/-2) setuptools/tests/test_develop.py (+6/-2) setuptools/tests/test_dist_info.py (+6/-2) setuptools/tests/test_easy_install.py (+8/-9) setuptools/tests/test_markerlib.py (+9/-9) setuptools/tests/test_resources.py (+10/-0) setuptools/tests/test_sdist.py (+171/-113) setuptools/tests/win_script_wrapper.txt (+21/-7) |
To merge this branch: | bzr merge lp:~logan/ubuntu/raring/distribute/0.6.34 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Daniel Holbach (community) | Approve | ||
Ubuntu branches | Pending | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'CHANGES.txt' |
2 | --- CHANGES.txt 2012-11-19 17:10:25 +0000 |
3 | +++ CHANGES.txt 2013-01-16 02:27:22 +0000 |
4 | @@ -2,6 +2,60 @@ |
5 | CHANGES |
6 | ======= |
7 | |
8 | +---------- |
9 | +Unreleased |
10 | +---------- |
11 | + |
12 | ++ Issue #341: 0.6.33 fails to build under python 2.4 |
13 | + |
14 | +------ |
15 | +0.6.33 |
16 | +------ |
17 | + |
18 | +* Fix 2 errors with Jython 2.5. |
19 | +* Fix 1 failure with Jython 2.5 and 2.7. |
20 | +* Disable workaround for Jython scripts on Linux systems. |
21 | +* Issue #336: `setup.py` no longer masks failure exit code when tests fail. |
22 | +* Fix issue in pkg_resources where try/except around a platform-dependent |
23 | + import would trigger hook load failures on Mercurial. See pull request 32 |
24 | + for details. |
25 | +* Issue #341: Fix a ResourceWarning. |
26 | + |
27 | +------ |
28 | +0.6.32 |
29 | +------ |
30 | + |
31 | +* Fix test suite with Python 2.6. |
32 | +* Fix some DeprecationWarnings and ResourceWarnings. |
33 | +* Issue #335: Backed out `setup_requires` superceding installed requirements |
34 | + until regression can be addressed. |
35 | + |
36 | +------ |
37 | +0.6.31 |
38 | +------ |
39 | + |
40 | +* Issue #303: Make sure the manifest only ever contains UTF-8 in Python 3. |
41 | +* Issue #329: Properly close files created by tests for compatibility with |
42 | + Jython. |
43 | +* Work around Jython bugs `#1980 <http://bugs.jython.org/issue1980>`_ and |
44 | + `#1981 <http://bugs.jython.org/issue1981>`_. |
45 | +* Issue #334: Provide workaround for packages that reference `sys.__stdout__` |
46 | + such as numpy does. This change should address |
47 | + `virtualenv #359 <https://github.com/pypa/virtualenv/issues/359>`_ as long |
48 | + as the system encoding is UTF-8 or the IO encoding is specified in the |
49 | + environment, i.e.:: |
50 | + |
51 | + PYTHONIOENCODING=utf8 pip install numpy |
52 | + |
53 | +* Fix for encoding issue when installing from Windows executable on Python 3. |
54 | +* Issue #323: Allow `setup_requires` requirements to supercede installed |
55 | + requirements. Added some new keyword arguments to existing pkg_resources |
56 | + methods. Also had to updated how __path__ is handled for namespace packages |
57 | + to ensure that when a new egg distribution containing a namespace package is |
58 | + placed on sys.path, the entries in __path__ are found in the same order they |
59 | + would have been in had that egg been on the path when pkg_resources was |
60 | + first imported. |
61 | + |
62 | ------ |
63 | 0.6.30 |
64 | ------ |
65 | @@ -306,11 +360,10 @@ |
66 | ----- |
67 | |
68 | * Added the generation of `distribute_setup_3k.py` during the release. |
69 | - This close http://bitbucket.org/tarek/distribute/issue/52. |
70 | + This closes issue #52. |
71 | |
72 | * Added an upload_docs command to easily upload project documentation to |
73 | - PyPI's http://packages.python.org. |
74 | - This close http://bitbucket.org/tarek/distribute/issue/56. |
75 | + PyPI's http://packages.python.org. This close issue #56. |
76 | |
77 | * Fixed a bootstrap bug on the use_setuptools() API. |
78 | |
79 | @@ -339,7 +392,7 @@ |
80 | This closes http://bugs.python.org/setuptools/issue39. |
81 | |
82 | * Added option to run 2to3 automatically when installing on Python 3. |
83 | - This closes http://bitbucket.org/tarek/distribute/issue/31. |
84 | + This closes issue #31. |
85 | |
86 | * Fixed invalid usage of requirement.parse, that broke develop -d. |
87 | This closes http://bugs.python.org/setuptools/issue44. |
88 | @@ -353,11 +406,9 @@ |
89 | bootstrapping |
90 | ============= |
91 | |
92 | -* Fixed bootstrap not working on Windows. |
93 | - This closes http://bitbucket.org/tarek/distribute/issue/49. |
94 | +* Fixed bootstrap not working on Windows. This closes issue #49. |
95 | |
96 | -* Fixed 2.6 dependencies. |
97 | - This closes http://bitbucket.org/tarek/distribute/issue/50. |
98 | +* Fixed 2.6 dependencies. This closes issue #50. |
99 | |
100 | * Make sure setuptools is patched when running through easy_install |
101 | This closes http://bugs.python.org/setuptools/issue40. |
102 | @@ -370,16 +421,14 @@ |
103 | ========== |
104 | |
105 | * package_index.urlopen now catches BadStatusLine and malformed url errors. |
106 | - This closes http://bitbucket.org/tarek/distribute/issue/16 and |
107 | - http://bitbucket.org/tarek/distribute/issue/18. |
108 | + This closes issue #16 and issue #18. |
109 | |
110 | * zip_ok is now False by default. This closes |
111 | http://bugs.python.org/setuptools/issue33. |
112 | |
113 | * Fixed invalid URL error catching. http://bugs.python.org/setuptools/issue20. |
114 | |
115 | -* Fixed invalid bootstraping with easy_install installation |
116 | - http://bitbucket.org/tarek/distribute/issue/40. |
117 | +* Fixed invalid bootstraping with easy_install installation (issue #40). |
118 | Thanks to Florian Schulze for the help. |
119 | |
120 | * Removed buildout/bootstrap.py. A new repository will create a specific |
121 | @@ -391,7 +440,7 @@ |
122 | |
123 | * The boostrap process leave setuptools alone if detected in the system |
124 | and --root or --prefix is provided, but is not in the same location. |
125 | - This closes http://bitbucket.org/tarek/distribute/issue/10. |
126 | + This closes issue #10. |
127 | |
128 | --- |
129 | 0.6 |
130 | @@ -401,45 +450,38 @@ |
131 | ========== |
132 | |
133 | * Packages required at build time where not fully present at install time. |
134 | - This closes http://bitbucket.org/tarek/distribute/issue/12. |
135 | - |
136 | -* Protected against failures in tarfile extraction. This closes |
137 | - http://bitbucket.org/tarek/distribute/issue/10. |
138 | - |
139 | -* Made Jython api_tests.txt doctest compatible. This closes |
140 | - http://bitbucket.org/tarek/distribute/issue/7. |
141 | + This closes issue #12. |
142 | + |
143 | +* Protected against failures in tarfile extraction. This closes issue #10. |
144 | + |
145 | +* Made Jython api_tests.txt doctest compatible. This closes issue #7. |
146 | |
147 | * sandbox.py replaced builtin type file with builtin function open. This |
148 | - closes http://bitbucket.org/tarek/distribute/issue/6. |
149 | - |
150 | -* Immediately close all file handles. This closes |
151 | - http://bitbucket.org/tarek/distribute/issue/3. |
152 | - |
153 | -* Added compatibility with Subversion 1.6. This references |
154 | - http://bitbucket.org/tarek/distribute/issue/1. |
155 | + closes issue #6. |
156 | + |
157 | +* Immediately close all file handles. This closes issue #3. |
158 | + |
159 | +* Added compatibility with Subversion 1.6. This references issue #1. |
160 | |
161 | pkg_resources |
162 | ============= |
163 | |
164 | * Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API |
165 | - instead. Based on a patch from ronaldoussoren. This closes |
166 | - http://bitbucket.org/tarek/distribute/issue/5. |
167 | + instead. Based on a patch from ronaldoussoren. This closes issue #5. |
168 | |
169 | * Fixed a SandboxViolation for mkdir that could occur in certain cases. |
170 | - This closes http://bitbucket.org/tarek/distribute/issue/13. |
171 | + This closes issue #13. |
172 | |
173 | * Allow to find_on_path on systems with tight permissions to fail gracefully. |
174 | - This closes http://bitbucket.org/tarek/distribute/issue/9. |
175 | + This closes issue #9. |
176 | |
177 | * Corrected inconsistency between documentation and code of add_entry. |
178 | - This closes http://bitbucket.org/tarek/distribute/issue/8. |
179 | + This closes issue #8. |
180 | |
181 | -* Immediately close all file handles. This closes |
182 | - http://bitbucket.org/tarek/distribute/issue/3. |
183 | +* Immediately close all file handles. This closes issue #3. |
184 | |
185 | easy_install |
186 | ============ |
187 | |
188 | -* Immediately close all file handles. This closes |
189 | - http://bitbucket.org/tarek/distribute/issue/3. |
190 | +* Immediately close all file handles. This closes issue #3. |
191 | |
192 | |
193 | === modified file 'CONTRIBUTORS.txt' |
194 | --- CONTRIBUTORS.txt 2012-10-21 19:41:01 +0000 |
195 | +++ CONTRIBUTORS.txt 2013-01-16 02:27:22 +0000 |
196 | @@ -18,6 +18,7 @@ |
197 | * Marc Abramowitz |
198 | * Martin von Löwis |
199 | * Noufal Ibrahim |
200 | +* Pete Hollobon |
201 | * Philip Jenvey |
202 | * Reinout van Rees |
203 | * Robert Myers |
204 | |
205 | === modified file 'PKG-INFO' |
206 | --- PKG-INFO 2012-11-19 17:10:25 +0000 |
207 | +++ PKG-INFO 2013-01-16 02:27:22 +0000 |
208 | @@ -1,6 +1,6 @@ |
209 | Metadata-Version: 1.1 |
210 | Name: distribute |
211 | -Version: 0.6.30 |
212 | +Version: 0.6.34 |
213 | Summary: Easily download, build, install, upgrade, and uninstall Python packages |
214 | Home-page: http://packages.python.org/distribute |
215 | Author: The fellowship of the packaging |
216 | @@ -107,9 +107,9 @@ |
217 | |
218 | Download the source tarball, uncompress it, then run the install command:: |
219 | |
220 | - $ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.30.tar.gz |
221 | - $ tar -xzvf distribute-0.6.30.tar.gz |
222 | - $ cd distribute-0.6.30 |
223 | + $ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.34.tar.gz |
224 | + $ tar -xzvf distribute-0.6.34.tar.gz |
225 | + $ cd distribute-0.6.34 |
226 | $ python setup.py install |
227 | |
228 | --------------------------- |
229 | @@ -238,11 +238,65 @@ |
230 | CHANGES |
231 | ======= |
232 | |
233 | + ---------- |
234 | + Unreleased |
235 | + ---------- |
236 | + |
237 | + + `Issue #341`_: 0.6.33 fails to build under python 2.4 |
238 | + |
239 | + ------ |
240 | + 0.6.33 |
241 | + ------ |
242 | + |
243 | + * Fix 2 errors with Jython 2.5. |
244 | + * Fix 1 failure with Jython 2.5 and 2.7. |
245 | + * Disable workaround for Jython scripts on Linux systems. |
246 | + * `Issue #336`_: `setup.py` no longer masks failure exit code when tests fail. |
247 | + * Fix issue in pkg_resources where try/except around a platform-dependent |
248 | + import would trigger hook load failures on Mercurial. See pull request 32 |
249 | + for details. |
250 | + * `Issue #341`_: Fix a ResourceWarning. |
251 | + |
252 | + ------ |
253 | + 0.6.32 |
254 | + ------ |
255 | + |
256 | + * Fix test suite with Python 2.6. |
257 | + * Fix some DeprecationWarnings and ResourceWarnings. |
258 | + * `Issue #335`_: Backed out `setup_requires` superceding installed requirements |
259 | + until regression can be addressed. |
260 | + |
261 | + ------ |
262 | + 0.6.31 |
263 | + ------ |
264 | + |
265 | + * `Issue #303`_: Make sure the manifest only ever contains UTF-8 in Python 3. |
266 | + * `Issue #329`_: Properly close files created by tests for compatibility with |
267 | + Jython. |
268 | + * Work around Jython bugs `#1980 <http://bugs.jython.org/`issue1980`_>`_ and |
269 | + `#1981 <http://bugs.jython.org/`issue1981`_>`_. |
270 | + * `Issue #334`_: Provide workaround for packages that reference `sys.__stdout__` |
271 | + such as numpy does. This change should address |
272 | + `virtualenv #359 <https://github.com/pypa/virtualenv/issues/359>`_ as long |
273 | + as the system encoding is UTF-8 or the IO encoding is specified in the |
274 | + environment, i.e.:: |
275 | + |
276 | + PYTHONIOENCODING=utf8 pip install numpy |
277 | + |
278 | + * Fix for encoding issue when installing from Windows executable on Python 3. |
279 | + * `Issue #323`_: Allow `setup_requires` requirements to supercede installed |
280 | + requirements. Added some new keyword arguments to existing pkg_resources |
281 | + methods. Also had to updated how __path__ is handled for namespace packages |
282 | + to ensure that when a new egg distribution containing a namespace package is |
283 | + placed on sys.path, the entries in __path__ are found in the same order they |
284 | + would have been in had that egg been on the path when pkg_resources was |
285 | + first imported. |
286 | + |
287 | ------ |
288 | 0.6.30 |
289 | ------ |
290 | |
291 | - * Issue #328: Clean up temporary directories in distribute_setup.py. |
292 | + * `Issue #328`_: Clean up temporary directories in distribute_setup.py. |
293 | * Fix fatal bug in distribute_setup.py. |
294 | |
295 | ------ |
296 | @@ -250,28 +304,28 @@ |
297 | ------ |
298 | |
299 | * Pull Request #14: Honor file permissions in zip files. |
300 | - * Issue #327: Merged pull request #24 to fix a dependency problem with pip. |
301 | + * `Issue #327`_: Merged pull request #24 to fix a dependency problem with pip. |
302 | * Merged pull request #23 to fix https://github.com/pypa/virtualenv/issues/301. |
303 | * If Sphinx is installed, the `upload_docs` command now runs `build_sphinx` |
304 | to produce uploadable documentation. |
305 | - * Issue #326: `upload_docs` provided mangled auth credentials under Python 3. |
306 | - * Issue #320: Fix check for "createable" in distribute_setup.py. |
307 | - * Issue #305: Remove a warning that was triggered during normal operations. |
308 | - * Issue #311: Print metadata in UTF-8 independent of platform. |
309 | - * Issue #303: Read manifest file with UTF-8 encoding under Python 3. |
310 | - * Issue #301: Allow to run tests of namespace packages when using 2to3. |
311 | - * Issue #304: Prevent import loop in site.py under Python 3.3. |
312 | - * Issue #283: Reenable scanning of `*.pyc` / `*.pyo` files on Python 3.3. |
313 | - * Issue #299: The develop command didn't work on Python 3, when using 2to3, |
314 | + * `Issue #326`_: `upload_docs` provided mangled auth credentials under Python 3. |
315 | + * `Issue #320`_: Fix check for "createable" in distribute_setup.py. |
316 | + * `Issue #305`_: Remove a warning that was triggered during normal operations. |
317 | + * `Issue #311`_: Print metadata in UTF-8 independent of platform. |
318 | + * `Issue #303`_: Read manifest file with UTF-8 encoding under Python 3. |
319 | + * `Issue #301`_: Allow to run tests of namespace packages when using 2to3. |
320 | + * `Issue #304`_: Prevent import loop in site.py under Python 3.3. |
321 | + * `Issue #283`_: Reenable scanning of `*.pyc` / `*.pyo` files on Python 3.3. |
322 | + * `Issue #299`_: The develop command didn't work on Python 3, when using 2to3, |
323 | as the egg link would go to the Python 2 source. Linking to the 2to3'd code |
324 | in build/lib makes it work, although you will have to rebuild the module |
325 | before testing it. |
326 | - * Issue #306: Even if 2to3 is used, we build in-place under Python 2. |
327 | - * Issue #307: Prints the full path when .svn/entries is broken. |
328 | - * Issue #313: Support for sdist subcommands (Python 2.7) |
329 | - * Issue #314: test_local_index() would fail an OS X. |
330 | - * Issue #310: Non-ascii characters in a namespace __init__.py causes errors. |
331 | - * Issue #218: Improved documentation on behavior of `package_data` and |
332 | + * `Issue #306`_: Even if 2to3 is used, we build in-place under Python 2. |
333 | + * `Issue #307`_: Prints the full path when .svn/entries is broken. |
334 | + * `Issue #313`_: Support for sdist subcommands (Python 2.7) |
335 | + * `Issue #314`_: test_local_index() would fail an OS X. |
336 | + * `Issue #310`_: Non-ascii characters in a namespace __init__.py causes errors. |
337 | + * `Issue #218`_: Improved documentation on behavior of `package_data` and |
338 | `include_package_data`. Files indicated by `package_data` are now included |
339 | in the manifest. |
340 | * `distribute_setup.py` now allows a `--download-base` argument for retrieving |
341 | @@ -281,10 +335,10 @@ |
342 | 0.6.28 |
343 | ------ |
344 | |
345 | - * Issue #294: setup.py can now be invoked from any directory. |
346 | + * `Issue #294`_: setup.py can now be invoked from any directory. |
347 | * Scripts are now installed honoring the umask. |
348 | * Added support for .dist-info directories. |
349 | - * Issue #283: Fix and disable scanning of `*.pyc` / `*.pyo` files on |
350 | + * `Issue #283`_: Fix and disable scanning of `*.pyc` / `*.pyo` files on |
351 | Python 3.3. |
352 | |
353 | ------ |
354 | @@ -295,15 +349,15 @@ |
355 | * Distribute now recognizes README.rst as a standard, default readme file. |
356 | * Exclude 'encodings' modules when removing modules from sys.modules. |
357 | Workaround for #285. |
358 | - * Issue #231: Don't fiddle with system python when used with buildout |
359 | + * `Issue #231`_: Don't fiddle with system python when used with buildout |
360 | (bootstrap.py) |
361 | |
362 | ------ |
363 | 0.6.26 |
364 | ------ |
365 | |
366 | - * Issue #183: Symlinked files are now extracted from source distributions. |
367 | - * Issue #227: Easy_install fetch parameters are now passed during the |
368 | + * `Issue #183`_: Symlinked files are now extracted from source distributions. |
369 | + * `Issue #227`_: Easy_install fetch parameters are now passed during the |
370 | installation of a source distribution; now fulfillment of setup_requires |
371 | dependencies will honor the parameters passed to easy_install. |
372 | |
373 | @@ -311,65 +365,65 @@ |
374 | 0.6.25 |
375 | ------ |
376 | |
377 | - * Issue #258: Workaround a cache issue |
378 | - * Issue #260: distribute_setup.py now accepts the --user parameter for |
379 | + * `Issue #258`_: Workaround a cache issue |
380 | + * `Issue #260`_: distribute_setup.py now accepts the --user parameter for |
381 | Python 2.6 and later. |
382 | - * Issue #262: package_index.open_with_auth no longer throws LookupError |
383 | + * `Issue #262`_: package_index.open_with_auth no longer throws LookupError |
384 | on Python 3. |
385 | - * Issue #269: AttributeError when an exception occurs reading Manifest.in |
386 | + * `Issue #269`_: AttributeError when an exception occurs reading Manifest.in |
387 | on late releases of Python. |
388 | - * Issue #272: Prevent TypeError when namespace package names are unicode |
389 | - and single-install-externally-managed is used. Also fixes PIP issue |
390 | - 449. |
391 | - * Issue #273: Legacy script launchers now install with Python2/3 support. |
392 | + * `Issue #272`_: Prevent TypeError when namespace package names are unicode |
393 | + and single-install-externally-managed is used. Also fixes PIP `issue |
394 | + 449`_. |
395 | + * `Issue #273`_: Legacy script launchers now install with Python2/3 support. |
396 | |
397 | ------ |
398 | 0.6.24 |
399 | ------ |
400 | |
401 | - * Issue #249: Added options to exclude 2to3 fixers |
402 | + * `Issue #249`_: Added options to exclude 2to3 fixers |
403 | |
404 | ------ |
405 | 0.6.23 |
406 | ------ |
407 | |
408 | - * Issue #244: Fixed a test |
409 | - * Issue #243: Fixed a test |
410 | - * Issue #239: Fixed a test |
411 | - * Issue #240: Fixed a test |
412 | - * Issue #241: Fixed a test |
413 | - * Issue #237: Fixed a test |
414 | - * Issue #238: easy_install now uses 64bit executable wrappers on 64bit Python |
415 | - * Issue #208: Fixed parsed_versions, it now honors post-releases as noted in the documentation |
416 | - * Issue #207: Windows cli and gui wrappers pass CTRL-C to child python process |
417 | - * Issue #227: easy_install now passes its arguments to setup.py bdist_egg |
418 | - * Issue #225: Fixed a NameError on Python 2.5, 2.4 |
419 | + * `Issue #244`_: Fixed a test |
420 | + * `Issue #243`_: Fixed a test |
421 | + * `Issue #239`_: Fixed a test |
422 | + * `Issue #240`_: Fixed a test |
423 | + * `Issue #241`_: Fixed a test |
424 | + * `Issue #237`_: Fixed a test |
425 | + * `Issue #238`_: easy_install now uses 64bit executable wrappers on 64bit Python |
426 | + * `Issue #208`_: Fixed parsed_versions, it now honors post-releases as noted in the documentation |
427 | + * `Issue #207`_: Windows cli and gui wrappers pass CTRL-C to child python process |
428 | + * `Issue #227`_: easy_install now passes its arguments to setup.py bdist_egg |
429 | + * `Issue #225`_: Fixed a NameError on Python 2.5, 2.4 |
430 | |
431 | ------ |
432 | 0.6.21 |
433 | ------ |
434 | |
435 | - * Issue #225: FIxed a regression on py2.4 |
436 | + * `Issue #225`_: FIxed a regression on py2.4 |
437 | |
438 | ------ |
439 | 0.6.20 |
440 | ------ |
441 | |
442 | - * Issue #135: Include url in warning when processing URLs in package_index. |
443 | - * Issue #212: Fix issue where easy_instal fails on Python 3 on windows installer. |
444 | - * Issue #213: Fix typo in documentation. |
445 | + * `Issue #135`_: Include url in warning when processing URLs in package_index. |
446 | + * `Issue #212`_: Fix issue where easy_instal fails on Python 3 on windows installer. |
447 | + * `Issue #213`_: Fix typo in documentation. |
448 | |
449 | ------ |
450 | 0.6.19 |
451 | ------ |
452 | |
453 | - * Issue 206: AttributeError: 'HTTPMessage' object has no attribute 'getheaders' |
454 | + * `Issue 206`_: AttributeError: 'HTTPMessage' object has no attribute 'getheaders' |
455 | |
456 | ------ |
457 | 0.6.18 |
458 | ------ |
459 | |
460 | - * Issue 210: Fixed a regression introduced by Issue 204 fix. |
461 | + * `Issue 210`_: Fixed a regression introduced by `Issue 204`_ fix. |
462 | |
463 | ------ |
464 | 0.6.17 |
465 | @@ -378,21 +432,21 @@ |
466 | * Support 'DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT' environment |
467 | variable to allow to disable installation of easy_install-${version} script. |
468 | * Support Python >=3.1.4 and >=3.2.1. |
469 | - * Issue 204: Don't try to import the parent of a namespace package in |
470 | + * `Issue 204`_: Don't try to import the parent of a namespace package in |
471 | declare_namespace |
472 | - * Issue 196: Tolerate responses with multiple Content-Length headers |
473 | - * Issue 205: Sandboxing doesn't preserve working_set. Leads to setup_requires |
474 | + * `Issue 196`_: Tolerate responses with multiple Content-Length headers |
475 | + * `Issue 205`_: Sandboxing doesn't preserve working_set. Leads to setup_requires |
476 | problems. |
477 | |
478 | ------ |
479 | 0.6.16 |
480 | ------ |
481 | |
482 | - * Builds sdist gztar even on Windows (avoiding Issue 193). |
483 | - * Issue 192: Fixed metadata omitted on Windows when package_dir |
484 | + * Builds sdist gztar even on Windows (avoiding `Issue 193`_). |
485 | + * `Issue 192`_: Fixed metadata omitted on Windows when package_dir |
486 | specified with forward-slash. |
487 | - * Issue 195: Cython build support. |
488 | - * Issue 200: Issues with recognizing 64-bit packages on Windows. |
489 | + * `Issue 195`_: Cython build support. |
490 | + * `Issue 200`_: Issues with recognizing 64-bit packages on Windows. |
491 | |
492 | ------ |
493 | 0.6.15 |
494 | @@ -400,49 +454,49 @@ |
495 | |
496 | * Fixed typo in bdist_egg |
497 | * Several issues under Python 3 has been solved. |
498 | - * Issue 146: Fixed missing DLL files after easy_install of windows exe package. |
499 | + * `Issue 146`_: Fixed missing DLL files after easy_install of windows exe package. |
500 | |
501 | ------ |
502 | 0.6.14 |
503 | ------ |
504 | |
505 | - * Issue 170: Fixed unittest failure. Thanks to Toshio. |
506 | - * Issue 171: Fixed race condition in unittests cause deadlocks in test suite. |
507 | - * Issue 143: Fixed a lookup issue with easy_install. |
508 | + * `Issue 170`_: Fixed unittest failure. Thanks to Toshio. |
509 | + * `Issue 171`_: Fixed race condition in unittests cause deadlocks in test suite. |
510 | + * `Issue 143`_: Fixed a lookup issue with easy_install. |
511 | Thanks to David and Zooko. |
512 | - * Issue 174: Fixed the edit mode when its used with setuptools itself |
513 | + * `Issue 174`_: Fixed the edit mode when its used with setuptools itself |
514 | |
515 | ------ |
516 | 0.6.13 |
517 | ------ |
518 | |
519 | - * Issue 160: 2.7 gives ValueError("Invalid IPv6 URL") |
520 | - * Issue 150: Fixed using ~/.local even in a --no-site-packages virtualenv |
521 | - * Issue 163: scan index links before external links, and don't use the md5 when |
522 | + * `Issue 160`_: 2.7 gives ValueError("Invalid IPv6 URL") |
523 | + * `Issue 150`_: Fixed using ~/.local even in a --no-site-packages virtualenv |
524 | + * `Issue 163`_: scan index links before external links, and don't use the md5 when |
525 | comparing two distributions |
526 | |
527 | ------ |
528 | 0.6.12 |
529 | ------ |
530 | |
531 | - * Issue 149: Fixed various failures on 2.3/2.4 |
532 | + * `Issue 149`_: Fixed various failures on 2.3/2.4 |
533 | |
534 | ------ |
535 | 0.6.11 |
536 | ------ |
537 | |
538 | * Found another case of SandboxViolation - fixed |
539 | - * Issue 15 and 48: Introduced a socket timeout of 15 seconds on url openings |
540 | + * `Issue 15`_ and 48: Introduced a socket timeout of 15 seconds on url openings |
541 | * Added indexsidebar.html into MANIFEST.in |
542 | - * Issue 108: Fixed TypeError with Python3.1 |
543 | - * Issue 121: Fixed --help install command trying to actually install. |
544 | - * Issue 112: Added an os.makedirs so that Tarek's solution will work. |
545 | - * Issue 133: Added --no-find-links to easy_install |
546 | + * `Issue 108`_: Fixed TypeError with Python3.1 |
547 | + * `Issue 121`_: Fixed --help install command trying to actually install. |
548 | + * `Issue 112`_: Added an os.makedirs so that Tarek's solution will work. |
549 | + * `Issue 133`_: Added --no-find-links to easy_install |
550 | * Added easy_install --user |
551 | - * Issue 100: Fixed develop --user not taking '.' in PYTHONPATH into account |
552 | - * Issue 134: removed spurious UserWarnings. Patch by VanLindberg |
553 | - * Issue 138: cant_write_to_target error when setup_requires is used. |
554 | - * Issue 147: respect the sys.dont_write_bytecode flag |
555 | + * `Issue 100`_: Fixed develop --user not taking '.' in PYTHONPATH into account |
556 | + * `Issue 134`_: removed spurious UserWarnings. Patch by VanLindberg |
557 | + * `Issue 138`_: cant_write_to_target error when setup_requires is used. |
558 | + * `Issue 147`_: respect the sys.dont_write_bytecode flag |
559 | |
560 | ------ |
561 | 0.6.10 |
562 | @@ -456,27 +510,27 @@ |
563 | 0.6.9 |
564 | ----- |
565 | |
566 | - * Issue 90: unknown setuptools version can be added in the working set |
567 | - * Issue 87: setupt.py doesn't try to convert distribute_setup.py anymore |
568 | + * `Issue 90`_: unknown setuptools version can be added in the working set |
569 | + * `Issue 87`_: setupt.py doesn't try to convert distribute_setup.py anymore |
570 | Initial Patch by arfrever. |
571 | - * Issue 89: added a side bar with a download link to the doc. |
572 | - * Issue 86: fixed missing sentence in pkg_resources doc. |
573 | + * `Issue 89`_: added a side bar with a download link to the doc. |
574 | + * `Issue 86`_: fixed missing sentence in pkg_resources doc. |
575 | * Added a nicer error message when a DistributionNotFound is raised. |
576 | - * Issue 80: test_develop now works with Python 3.1 |
577 | - * Issue 93: upload_docs now works if there is an empty sub-directory. |
578 | - * Issue 70: exec bit on non-exec files |
579 | - * Issue 99: now the standalone easy_install command doesn't uses a |
580 | + * `Issue 80`_: test_develop now works with Python 3.1 |
581 | + * `Issue 93`_: upload_docs now works if there is an empty sub-directory. |
582 | + * `Issue 70`_: exec bit on non-exec files |
583 | + * `Issue 99`_: now the standalone easy_install command doesn't uses a |
584 | "setup.cfg" if any exists in the working directory. It will use it |
585 | only if triggered by ``install_requires`` from a setup.py call |
586 | (install, develop, etc). |
587 | - * Issue 101: Allowing ``os.devnull`` in Sandbox |
588 | - * Issue 92: Fixed the "no eggs" found error with MacPort |
589 | + * `Issue 101`_: Allowing ``os.devnull`` in Sandbox |
590 | + * `Issue 92`_: Fixed the "no eggs" found error with MacPort |
591 | (platform.mac_ver() fails) |
592 | - * Issue 103: test_get_script_header_jython_workaround not run |
593 | + * `Issue 103`_: test_get_script_header_jython_workaround not run |
594 | anymore under py3 with C or POSIX local. Contributed by Arfrever. |
595 | - * Issue 104: remvoved the assertion when the installation fails, |
596 | + * `Issue 104`_: remvoved the assertion when the installation fails, |
597 | with a nicer message for the end user. |
598 | - * Issue 100: making sure there's no SandboxViolation when |
599 | + * `Issue 100`_: making sure there's no SandboxViolation when |
600 | the setup script patches setuptools. |
601 | |
602 | ----- |
603 | @@ -490,8 +544,8 @@ |
604 | 0.6.7 |
605 | ----- |
606 | |
607 | - * Issue 58: Added --user support to the develop command |
608 | - * Issue 11: Generated scripts now wrap their call to the script entry point |
609 | + * `Issue 58`_: Added --user support to the develop command |
610 | + * `Issue 11`_: Generated scripts now wrap their call to the script entry point |
611 | in the standard "if name == 'main'" |
612 | * Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv |
613 | can drive an installation that doesn't patch a global setuptools. |
614 | @@ -499,17 +553,17 @@ |
615 | http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 |
616 | and determined that it no longer applies. Distribute should work fine with |
617 | Unladen Swallow 2009Q3. |
618 | - * Issue 21: Allow PackageIndex.open_url to gracefully handle all cases of a |
619 | + * `Issue 21`_: Allow PackageIndex.open_url to gracefully handle all cases of a |
620 | httplib.HTTPException instead of just InvalidURL and BadStatusLine. |
621 | * Removed virtual-python.py from this distribution and updated documentation |
622 | to point to the actively maintained virtualenv instead. |
623 | - * Issue 64: use_setuptools no longer rebuilds the distribute egg every |
624 | + * `Issue 64`_: use_setuptools no longer rebuilds the distribute egg every |
625 | time it is run |
626 | * use_setuptools now properly respects the requested version |
627 | * use_setuptools will no longer try to import a distribute egg for the |
628 | wrong Python version |
629 | - * Issue 74: no_fake should be True by default. |
630 | - * Issue 72: avoid a bootstrapping issue with easy_install -U |
631 | + * `Issue 74`_: no_fake should be True by default. |
632 | + * `Issue 72`_: avoid a bootstrapping issue with easy_install -U |
633 | |
634 | ----- |
635 | 0.6.6 |
636 | @@ -522,10 +576,10 @@ |
637 | 0.6.5 |
638 | ----- |
639 | |
640 | - * Issue 65: cli.exe and gui.exe are now generated at build time, |
641 | + * `Issue 65`_: cli.exe and gui.exe are now generated at build time, |
642 | depending on the platform in use. |
643 | |
644 | - * Issue 67: Fixed doc typo (PEP 381/382) |
645 | + * `Issue 67`_: Fixed doc typo (PEP 381/382) |
646 | |
647 | * Distribute no longer shadows setuptools if we require a 0.7-series |
648 | setuptools. And an error is raised when installing a 0.7 setuptools with |
649 | @@ -542,11 +596,10 @@ |
650 | ----- |
651 | |
652 | * Added the generation of `distribute_setup_3k.py` during the release. |
653 | - This close http://bitbucket.org/tarek/distribute/issue/52. |
654 | + This closes `issue #52`_. |
655 | |
656 | * Added an upload_docs command to easily upload project documentation to |
657 | - PyPI's http://packages.python.org. |
658 | - This close http://bitbucket.org/tarek/distribute/issue/56. |
659 | + PyPI's http://packages.python.org. This close `issue #56`_. |
660 | |
661 | * Fixed a bootstrap bug on the use_setuptools() API. |
662 | |
663 | @@ -572,31 +625,29 @@ |
664 | ========== |
665 | |
666 | * Added Python 3 support; see docs/python3.txt. |
667 | - This closes http://bugs.python.org/setuptools/issue39. |
668 | + This closes http://bugs.python.org/setuptools/`issue39`_. |
669 | |
670 | * Added option to run 2to3 automatically when installing on Python 3. |
671 | - This closes http://bitbucket.org/tarek/distribute/issue/31. |
672 | + This closes `issue #31`_. |
673 | |
674 | * Fixed invalid usage of requirement.parse, that broke develop -d. |
675 | - This closes http://bugs.python.org/setuptools/issue44. |
676 | + This closes http://bugs.python.org/setuptools/`issue44`_. |
677 | |
678 | * Fixed script launcher for 64-bit Windows. |
679 | - This closes http://bugs.python.org/setuptools/issue2. |
680 | + This closes http://bugs.python.org/setuptools/`issue2`_. |
681 | |
682 | * KeyError when compiling extensions. |
683 | - This closes http://bugs.python.org/setuptools/issue41. |
684 | + This closes http://bugs.python.org/setuptools/`issue41`_. |
685 | |
686 | bootstrapping |
687 | ============= |
688 | |
689 | - * Fixed bootstrap not working on Windows. |
690 | - This closes http://bitbucket.org/tarek/distribute/issue/49. |
691 | + * Fixed bootstrap not working on Windows. This closes `issue #49`_. |
692 | |
693 | - * Fixed 2.6 dependencies. |
694 | - This closes http://bitbucket.org/tarek/distribute/issue/50. |
695 | + * Fixed 2.6 dependencies. This closes `issue #50`_. |
696 | |
697 | * Make sure setuptools is patched when running through easy_install |
698 | - This closes http://bugs.python.org/setuptools/issue40. |
699 | + This closes http://bugs.python.org/setuptools/`issue40`_. |
700 | |
701 | ----- |
702 | 0.6.1 |
703 | @@ -606,16 +657,14 @@ |
704 | ========== |
705 | |
706 | * package_index.urlopen now catches BadStatusLine and malformed url errors. |
707 | - This closes http://bitbucket.org/tarek/distribute/issue/16 and |
708 | - http://bitbucket.org/tarek/distribute/issue/18. |
709 | + This closes `issue #16`_ and `issue #18`_. |
710 | |
711 | * zip_ok is now False by default. This closes |
712 | - http://bugs.python.org/setuptools/issue33. |
713 | - |
714 | - * Fixed invalid URL error catching. http://bugs.python.org/setuptools/issue20. |
715 | - |
716 | - * Fixed invalid bootstraping with easy_install installation |
717 | - http://bitbucket.org/tarek/distribute/issue/40. |
718 | + http://bugs.python.org/setuptools/`issue33`_. |
719 | + |
720 | + * Fixed invalid URL error catching. http://bugs.python.org/setuptools/`issue20`_. |
721 | + |
722 | + * Fixed invalid bootstraping with easy_install installation (`issue #40`_). |
723 | Thanks to Florian Schulze for the help. |
724 | |
725 | * Removed buildout/bootstrap.py. A new repository will create a specific |
726 | @@ -627,7 +676,7 @@ |
727 | |
728 | * The boostrap process leave setuptools alone if detected in the system |
729 | and --root or --prefix is provided, but is not in the same location. |
730 | - This closes http://bitbucket.org/tarek/distribute/issue/10. |
731 | + This closes `issue #10`_. |
732 | |
733 | --- |
734 | 0.6 |
735 | @@ -637,47 +686,165 @@ |
736 | ========== |
737 | |
738 | * Packages required at build time where not fully present at install time. |
739 | - This closes http://bitbucket.org/tarek/distribute/issue/12. |
740 | - |
741 | - * Protected against failures in tarfile extraction. This closes |
742 | - http://bitbucket.org/tarek/distribute/issue/10. |
743 | - |
744 | - * Made Jython api_tests.txt doctest compatible. This closes |
745 | - http://bitbucket.org/tarek/distribute/issue/7. |
746 | + This closes `issue #12`_. |
747 | + |
748 | + * Protected against failures in tarfile extraction. This closes `issue #10`_. |
749 | + |
750 | + * Made Jython api_tests.txt doctest compatible. This closes `issue #7`_. |
751 | |
752 | * sandbox.py replaced builtin type file with builtin function open. This |
753 | - closes http://bitbucket.org/tarek/distribute/issue/6. |
754 | - |
755 | - * Immediately close all file handles. This closes |
756 | - http://bitbucket.org/tarek/distribute/issue/3. |
757 | - |
758 | - * Added compatibility with Subversion 1.6. This references |
759 | - http://bitbucket.org/tarek/distribute/issue/1. |
760 | + closes `issue #6`_. |
761 | + |
762 | + * Immediately close all file handles. This closes `issue #3`_. |
763 | + |
764 | + * Added compatibility with Subversion 1.6. This references `issue #1`_. |
765 | |
766 | pkg_resources |
767 | ============= |
768 | |
769 | * Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API |
770 | - instead. Based on a patch from ronaldoussoren. This closes |
771 | - http://bitbucket.org/tarek/distribute/issue/5. |
772 | + instead. Based on a patch from ronaldoussoren. This closes `issue #5`_. |
773 | |
774 | * Fixed a SandboxViolation for mkdir that could occur in certain cases. |
775 | - This closes http://bitbucket.org/tarek/distribute/issue/13. |
776 | + This closes `issue #13`_. |
777 | |
778 | * Allow to find_on_path on systems with tight permissions to fail gracefully. |
779 | - This closes http://bitbucket.org/tarek/distribute/issue/9. |
780 | + This closes `issue #9`_. |
781 | |
782 | * Corrected inconsistency between documentation and code of add_entry. |
783 | - This closes http://bitbucket.org/tarek/distribute/issue/8. |
784 | + This closes `issue #8`_. |
785 | |
786 | - * Immediately close all file handles. This closes |
787 | - http://bitbucket.org/tarek/distribute/issue/3. |
788 | + * Immediately close all file handles. This closes `issue #3`_. |
789 | |
790 | easy_install |
791 | ============ |
792 | |
793 | - * Immediately close all file handles. This closes |
794 | - http://bitbucket.org/tarek/distribute/issue/3. |
795 | + * Immediately close all file handles. This closes `issue #3`_. |
796 | + |
797 | + |
798 | + .. _`Issue #135`: http://bitbucket.org/tarek/distribute/issue/135 |
799 | + .. _`Issue #183`: http://bitbucket.org/tarek/distribute/issue/183 |
800 | + .. _`Issue #207`: http://bitbucket.org/tarek/distribute/issue/207 |
801 | + .. _`Issue #208`: http://bitbucket.org/tarek/distribute/issue/208 |
802 | + .. _`Issue #212`: http://bitbucket.org/tarek/distribute/issue/212 |
803 | + .. _`Issue #213`: http://bitbucket.org/tarek/distribute/issue/213 |
804 | + .. _`Issue #218`: http://bitbucket.org/tarek/distribute/issue/218 |
805 | + .. _`Issue #225`: http://bitbucket.org/tarek/distribute/issue/225 |
806 | + .. _`Issue #227`: http://bitbucket.org/tarek/distribute/issue/227 |
807 | + .. _`Issue #231`: http://bitbucket.org/tarek/distribute/issue/231 |
808 | + .. _`Issue #237`: http://bitbucket.org/tarek/distribute/issue/237 |
809 | + .. _`Issue #238`: http://bitbucket.org/tarek/distribute/issue/238 |
810 | + .. _`Issue #239`: http://bitbucket.org/tarek/distribute/issue/239 |
811 | + .. _`Issue #240`: http://bitbucket.org/tarek/distribute/issue/240 |
812 | + .. _`Issue #241`: http://bitbucket.org/tarek/distribute/issue/241 |
813 | + .. _`Issue #243`: http://bitbucket.org/tarek/distribute/issue/243 |
814 | + .. _`Issue #244`: http://bitbucket.org/tarek/distribute/issue/244 |
815 | + .. _`Issue #249`: http://bitbucket.org/tarek/distribute/issue/249 |
816 | + .. _`Issue #258`: http://bitbucket.org/tarek/distribute/issue/258 |
817 | + .. _`Issue #260`: http://bitbucket.org/tarek/distribute/issue/260 |
818 | + .. _`Issue #262`: http://bitbucket.org/tarek/distribute/issue/262 |
819 | + .. _`Issue #269`: http://bitbucket.org/tarek/distribute/issue/269 |
820 | + .. _`Issue #272`: http://bitbucket.org/tarek/distribute/issue/272 |
821 | + .. _`Issue #273`: http://bitbucket.org/tarek/distribute/issue/273 |
822 | + .. _`Issue #283`: http://bitbucket.org/tarek/distribute/issue/283 |
823 | + .. _`Issue #294`: http://bitbucket.org/tarek/distribute/issue/294 |
824 | + .. _`Issue #299`: http://bitbucket.org/tarek/distribute/issue/299 |
825 | + .. _`Issue #301`: http://bitbucket.org/tarek/distribute/issue/301 |
826 | + .. _`Issue #303`: http://bitbucket.org/tarek/distribute/issue/303 |
827 | + .. _`Issue #304`: http://bitbucket.org/tarek/distribute/issue/304 |
828 | + .. _`Issue #305`: http://bitbucket.org/tarek/distribute/issue/305 |
829 | + .. _`Issue #306`: http://bitbucket.org/tarek/distribute/issue/306 |
830 | + .. _`Issue #307`: http://bitbucket.org/tarek/distribute/issue/307 |
831 | + .. _`Issue #310`: http://bitbucket.org/tarek/distribute/issue/310 |
832 | + .. _`Issue #311`: http://bitbucket.org/tarek/distribute/issue/311 |
833 | + .. _`Issue #313`: http://bitbucket.org/tarek/distribute/issue/313 |
834 | + .. _`Issue #314`: http://bitbucket.org/tarek/distribute/issue/314 |
835 | + .. _`Issue #320`: http://bitbucket.org/tarek/distribute/issue/320 |
836 | + .. _`Issue #323`: http://bitbucket.org/tarek/distribute/issue/323 |
837 | + .. _`Issue #326`: http://bitbucket.org/tarek/distribute/issue/326 |
838 | + .. _`Issue #327`: http://bitbucket.org/tarek/distribute/issue/327 |
839 | + .. _`Issue #328`: http://bitbucket.org/tarek/distribute/issue/328 |
840 | + .. _`Issue #329`: http://bitbucket.org/tarek/distribute/issue/329 |
841 | + .. _`Issue #334`: http://bitbucket.org/tarek/distribute/issue/334 |
842 | + .. _`Issue #335`: http://bitbucket.org/tarek/distribute/issue/335 |
843 | + .. _`Issue #336`: http://bitbucket.org/tarek/distribute/issue/336 |
844 | + .. _`Issue #341`: http://bitbucket.org/tarek/distribute/issue/341 |
845 | + .. _`Issue 100`: http://bitbucket.org/tarek/distribute/issue/100 |
846 | + .. _`Issue 101`: http://bitbucket.org/tarek/distribute/issue/101 |
847 | + .. _`Issue 103`: http://bitbucket.org/tarek/distribute/issue/103 |
848 | + .. _`Issue 104`: http://bitbucket.org/tarek/distribute/issue/104 |
849 | + .. _`Issue 108`: http://bitbucket.org/tarek/distribute/issue/108 |
850 | + .. _`Issue 11`: http://bitbucket.org/tarek/distribute/issue/11 |
851 | + .. _`Issue 112`: http://bitbucket.org/tarek/distribute/issue/112 |
852 | + .. _`Issue 121`: http://bitbucket.org/tarek/distribute/issue/121 |
853 | + .. _`Issue 133`: http://bitbucket.org/tarek/distribute/issue/133 |
854 | + .. _`Issue 134`: http://bitbucket.org/tarek/distribute/issue/134 |
855 | + .. _`Issue 138`: http://bitbucket.org/tarek/distribute/issue/138 |
856 | + .. _`Issue 143`: http://bitbucket.org/tarek/distribute/issue/143 |
857 | + .. _`Issue 146`: http://bitbucket.org/tarek/distribute/issue/146 |
858 | + .. _`Issue 147`: http://bitbucket.org/tarek/distribute/issue/147 |
859 | + .. _`Issue 149`: http://bitbucket.org/tarek/distribute/issue/149 |
860 | + .. _`Issue 15`: http://bitbucket.org/tarek/distribute/issue/15 |
861 | + .. _`Issue 150`: http://bitbucket.org/tarek/distribute/issue/150 |
862 | + .. _`Issue 160`: http://bitbucket.org/tarek/distribute/issue/160 |
863 | + .. _`Issue 163`: http://bitbucket.org/tarek/distribute/issue/163 |
864 | + .. _`Issue 170`: http://bitbucket.org/tarek/distribute/issue/170 |
865 | + .. _`Issue 171`: http://bitbucket.org/tarek/distribute/issue/171 |
866 | + .. _`Issue 174`: http://bitbucket.org/tarek/distribute/issue/174 |
867 | + .. _`Issue 192`: http://bitbucket.org/tarek/distribute/issue/192 |
868 | + .. _`Issue 193`: http://bitbucket.org/tarek/distribute/issue/193 |
869 | + .. _`Issue 195`: http://bitbucket.org/tarek/distribute/issue/195 |
870 | + .. _`Issue 196`: http://bitbucket.org/tarek/distribute/issue/196 |
871 | + .. _`Issue 200`: http://bitbucket.org/tarek/distribute/issue/200 |
872 | + .. _`Issue 204`: http://bitbucket.org/tarek/distribute/issue/204 |
873 | + .. _`Issue 205`: http://bitbucket.org/tarek/distribute/issue/205 |
874 | + .. _`Issue 206`: http://bitbucket.org/tarek/distribute/issue/206 |
875 | + .. _`Issue 21`: http://bitbucket.org/tarek/distribute/issue/21 |
876 | + .. _`Issue 210`: http://bitbucket.org/tarek/distribute/issue/210 |
877 | + .. _`Issue 58`: http://bitbucket.org/tarek/distribute/issue/58 |
878 | + .. _`Issue 64`: http://bitbucket.org/tarek/distribute/issue/64 |
879 | + .. _`Issue 65`: http://bitbucket.org/tarek/distribute/issue/65 |
880 | + .. _`Issue 67`: http://bitbucket.org/tarek/distribute/issue/67 |
881 | + .. _`Issue 70`: http://bitbucket.org/tarek/distribute/issue/70 |
882 | + .. _`Issue 72`: http://bitbucket.org/tarek/distribute/issue/72 |
883 | + .. _`Issue 74`: http://bitbucket.org/tarek/distribute/issue/74 |
884 | + .. _`Issue 80`: http://bitbucket.org/tarek/distribute/issue/80 |
885 | + .. _`Issue 86`: http://bitbucket.org/tarek/distribute/issue/86 |
886 | + .. _`Issue 87`: http://bitbucket.org/tarek/distribute/issue/87 |
887 | + .. _`Issue 89`: http://bitbucket.org/tarek/distribute/issue/89 |
888 | + .. _`Issue 90`: http://bitbucket.org/tarek/distribute/issue/90 |
889 | + .. _`Issue 92`: http://bitbucket.org/tarek/distribute/issue/92 |
890 | + .. _`Issue 93`: http://bitbucket.org/tarek/distribute/issue/93 |
891 | + .. _`Issue 99`: http://bitbucket.org/tarek/distribute/issue/99 |
892 | + .. _`issue |
893 | + 449`: http://bitbucket.org/tarek/distribute/issue/449 |
894 | + .. _`issue #1`: http://bitbucket.org/tarek/distribute/issue/1 |
895 | + .. _`issue #10`: http://bitbucket.org/tarek/distribute/issue/10 |
896 | + .. _`issue #12`: http://bitbucket.org/tarek/distribute/issue/12 |
897 | + .. _`issue #13`: http://bitbucket.org/tarek/distribute/issue/13 |
898 | + .. _`issue #16`: http://bitbucket.org/tarek/distribute/issue/16 |
899 | + .. _`issue #18`: http://bitbucket.org/tarek/distribute/issue/18 |
900 | + .. _`issue #3`: http://bitbucket.org/tarek/distribute/issue/3 |
901 | + .. _`issue #31`: http://bitbucket.org/tarek/distribute/issue/31 |
902 | + .. _`issue #40`: http://bitbucket.org/tarek/distribute/issue/40 |
903 | + .. _`issue #49`: http://bitbucket.org/tarek/distribute/issue/49 |
904 | + .. _`issue #5`: http://bitbucket.org/tarek/distribute/issue/5 |
905 | + .. _`issue #50`: http://bitbucket.org/tarek/distribute/issue/50 |
906 | + .. _`issue #52`: http://bitbucket.org/tarek/distribute/issue/52 |
907 | + .. _`issue #56`: http://bitbucket.org/tarek/distribute/issue/56 |
908 | + .. _`issue #6`: http://bitbucket.org/tarek/distribute/issue/6 |
909 | + .. _`issue #7`: http://bitbucket.org/tarek/distribute/issue/7 |
910 | + .. _`issue #8`: http://bitbucket.org/tarek/distribute/issue/8 |
911 | + .. _`issue #9`: http://bitbucket.org/tarek/distribute/issue/9 |
912 | + .. _`issue1980`: http://bitbucket.org/tarek/distribute/issue/1980 |
913 | + .. _`issue1981`: http://bitbucket.org/tarek/distribute/issue/1981 |
914 | + .. _`issue2`: http://bitbucket.org/tarek/distribute/issue/2 |
915 | + .. _`issue20`: http://bitbucket.org/tarek/distribute/issue/20 |
916 | + .. _`issue33`: http://bitbucket.org/tarek/distribute/issue/33 |
917 | + .. _`issue39`: http://bitbucket.org/tarek/distribute/issue/39 |
918 | + .. _`issue40`: http://bitbucket.org/tarek/distribute/issue/40 |
919 | + .. _`issue41`: http://bitbucket.org/tarek/distribute/issue/41 |
920 | + .. _`issue44`: http://bitbucket.org/tarek/distribute/issue/44 |
921 | |
922 | |
923 | Keywords: CPAN PyPI distutils eggs package management |
924 | |
925 | === modified file 'README.txt' |
926 | --- README.txt 2012-11-19 17:10:25 +0000 |
927 | +++ README.txt 2013-01-16 02:27:22 +0000 |
928 | @@ -99,9 +99,9 @@ |
929 | |
930 | Download the source tarball, uncompress it, then run the install command:: |
931 | |
932 | - $ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.30.tar.gz |
933 | - $ tar -xzvf distribute-0.6.30.tar.gz |
934 | - $ cd distribute-0.6.30 |
935 | + $ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.34.tar.gz |
936 | + $ tar -xzvf distribute-0.6.34.tar.gz |
937 | + $ cd distribute-0.6.34 |
938 | $ python setup.py install |
939 | |
940 | --------------------------- |
941 | |
942 | === modified file '_markerlib/markers.py' |
943 | --- _markerlib/markers.py 2012-10-21 19:41:01 +0000 |
944 | +++ _markerlib/markers.py 2013-01-16 02:27:22 +0000 |
945 | @@ -17,9 +17,7 @@ |
946 | |
947 | __all__ = ['default_environment', 'compile', 'interpret'] |
948 | |
949 | -from ast import Compare, BoolOp, Attribute, Name, Load, Str, cmpop, boolop |
950 | -from ast import parse, copy_location, NodeTransformer |
951 | - |
952 | +import ast |
953 | import os |
954 | import platform |
955 | import sys |
956 | @@ -27,7 +25,16 @@ |
957 | |
958 | _builtin_compile = compile |
959 | |
960 | -from platform import python_implementation |
961 | +try: |
962 | + from platform import python_implementation |
963 | +except ImportError: |
964 | + if os.name == "java": |
965 | + # Jython 2.5 has ast module, but not platform.python_implementation() function. |
966 | + def python_implementation(): |
967 | + return "Jython" |
968 | + else: |
969 | + raise |
970 | + |
971 | |
972 | # restricted set of variables |
973 | _VARS = {'sys.platform': sys.platform, |
974 | @@ -46,27 +53,31 @@ |
975 | """Return copy of default PEP 385 globals dictionary.""" |
976 | return dict(_VARS) |
977 | |
978 | -class ASTWhitelist(NodeTransformer): |
979 | +class ASTWhitelist(ast.NodeTransformer): |
980 | def __init__(self, statement): |
981 | self.statement = statement # for error messages |
982 | - |
983 | - ALLOWED = (Compare, BoolOp, Attribute, Name, Load, Str, cmpop, boolop) |
984 | - |
985 | + |
986 | + ALLOWED = (ast.Compare, ast.BoolOp, ast.Attribute, ast.Name, ast.Load, ast.Str) |
987 | + # Bool operations |
988 | + ALLOWED += (ast.And, ast.Or) |
989 | + # Comparison operations |
990 | + ALLOWED += (ast.Eq, ast.Gt, ast.GtE, ast.In, ast.Is, ast.IsNot, ast.Lt, ast.LtE, ast.NotEq, ast.NotIn) |
991 | + |
992 | def visit(self, node): |
993 | """Ensure statement only contains allowed nodes.""" |
994 | if not isinstance(node, self.ALLOWED): |
995 | raise SyntaxError('Not allowed in environment markers.\n%s\n%s' % |
996 | - (self.statement, |
997 | + (self.statement, |
998 | (' ' * node.col_offset) + '^')) |
999 | - return NodeTransformer.visit(self, node) |
1000 | - |
1001 | + return ast.NodeTransformer.visit(self, node) |
1002 | + |
1003 | def visit_Attribute(self, node): |
1004 | """Flatten one level of attribute access.""" |
1005 | - new_node = Name("%s.%s" % (node.value.id, node.attr), node.ctx) |
1006 | - return copy_location(new_node, node) |
1007 | + new_node = ast.Name("%s.%s" % (node.value.id, node.attr), node.ctx) |
1008 | + return ast.copy_location(new_node, node) |
1009 | |
1010 | def parse_marker(marker): |
1011 | - tree = parse(marker, mode='eval') |
1012 | + tree = ast.parse(marker, mode='eval') |
1013 | new_tree = ASTWhitelist(marker).generic_visit(tree) |
1014 | return new_tree |
1015 | |
1016 | |
1017 | === modified file 'debian/changelog' |
1018 | --- debian/changelog 2012-11-19 17:10:25 +0000 |
1019 | +++ debian/changelog 2013-01-16 02:27:22 +0000 |
1020 | @@ -1,3 +1,9 @@ |
1021 | +distribute (0.6.34-0ubuntu1) raring; urgency=low |
1022 | + |
1023 | + * New upstream release. |
1024 | + |
1025 | + -- Logan Rosen <logatronico@gmail.com> Tue, 15 Jan 2013 21:13:37 -0500 |
1026 | + |
1027 | distribute (0.6.30-0ubuntu1) raring; urgency=low |
1028 | |
1029 | * New upstream release. |
1030 | |
1031 | === modified file 'distribute.egg-info/PKG-INFO' |
1032 | --- distribute.egg-info/PKG-INFO 2012-11-19 17:10:25 +0000 |
1033 | +++ distribute.egg-info/PKG-INFO 2013-01-16 02:27:22 +0000 |
1034 | @@ -1,6 +1,6 @@ |
1035 | Metadata-Version: 1.1 |
1036 | Name: distribute |
1037 | -Version: 0.6.30 |
1038 | +Version: 0.6.34 |
1039 | Summary: Easily download, build, install, upgrade, and uninstall Python packages |
1040 | Home-page: http://packages.python.org/distribute |
1041 | Author: The fellowship of the packaging |
1042 | @@ -107,9 +107,9 @@ |
1043 | |
1044 | Download the source tarball, uncompress it, then run the install command:: |
1045 | |
1046 | - $ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.30.tar.gz |
1047 | - $ tar -xzvf distribute-0.6.30.tar.gz |
1048 | - $ cd distribute-0.6.30 |
1049 | + $ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.34.tar.gz |
1050 | + $ tar -xzvf distribute-0.6.34.tar.gz |
1051 | + $ cd distribute-0.6.34 |
1052 | $ python setup.py install |
1053 | |
1054 | --------------------------- |
1055 | @@ -238,11 +238,65 @@ |
1056 | CHANGES |
1057 | ======= |
1058 | |
1059 | + ---------- |
1060 | + Unreleased |
1061 | + ---------- |
1062 | + |
1063 | + + `Issue #341`_: 0.6.33 fails to build under python 2.4 |
1064 | + |
1065 | + ------ |
1066 | + 0.6.33 |
1067 | + ------ |
1068 | + |
1069 | + * Fix 2 errors with Jython 2.5. |
1070 | + * Fix 1 failure with Jython 2.5 and 2.7. |
1071 | + * Disable workaround for Jython scripts on Linux systems. |
1072 | + * `Issue #336`_: `setup.py` no longer masks failure exit code when tests fail. |
1073 | + * Fix issue in pkg_resources where try/except around a platform-dependent |
1074 | + import would trigger hook load failures on Mercurial. See pull request 32 |
1075 | + for details. |
1076 | + * `Issue #341`_: Fix a ResourceWarning. |
1077 | + |
1078 | + ------ |
1079 | + 0.6.32 |
1080 | + ------ |
1081 | + |
1082 | + * Fix test suite with Python 2.6. |
1083 | + * Fix some DeprecationWarnings and ResourceWarnings. |
1084 | + * `Issue #335`_: Backed out `setup_requires` superceding installed requirements |
1085 | + until regression can be addressed. |
1086 | + |
1087 | + ------ |
1088 | + 0.6.31 |
1089 | + ------ |
1090 | + |
1091 | + * `Issue #303`_: Make sure the manifest only ever contains UTF-8 in Python 3. |
1092 | + * `Issue #329`_: Properly close files created by tests for compatibility with |
1093 | + Jython. |
1094 | + * Work around Jython bugs `#1980 <http://bugs.jython.org/`issue1980`_>`_ and |
1095 | + `#1981 <http://bugs.jython.org/`issue1981`_>`_. |
1096 | + * `Issue #334`_: Provide workaround for packages that reference `sys.__stdout__` |
1097 | + such as numpy does. This change should address |
1098 | + `virtualenv #359 <https://github.com/pypa/virtualenv/issues/359>`_ as long |
1099 | + as the system encoding is UTF-8 or the IO encoding is specified in the |
1100 | + environment, i.e.:: |
1101 | + |
1102 | + PYTHONIOENCODING=utf8 pip install numpy |
1103 | + |
1104 | + * Fix for encoding issue when installing from Windows executable on Python 3. |
1105 | + * `Issue #323`_: Allow `setup_requires` requirements to supercede installed |
1106 | + requirements. Added some new keyword arguments to existing pkg_resources |
1107 | + methods. Also had to updated how __path__ is handled for namespace packages |
1108 | + to ensure that when a new egg distribution containing a namespace package is |
1109 | + placed on sys.path, the entries in __path__ are found in the same order they |
1110 | + would have been in had that egg been on the path when pkg_resources was |
1111 | + first imported. |
1112 | + |
1113 | ------ |
1114 | 0.6.30 |
1115 | ------ |
1116 | |
1117 | - * Issue #328: Clean up temporary directories in distribute_setup.py. |
1118 | + * `Issue #328`_: Clean up temporary directories in distribute_setup.py. |
1119 | * Fix fatal bug in distribute_setup.py. |
1120 | |
1121 | ------ |
1122 | @@ -250,28 +304,28 @@ |
1123 | ------ |
1124 | |
1125 | * Pull Request #14: Honor file permissions in zip files. |
1126 | - * Issue #327: Merged pull request #24 to fix a dependency problem with pip. |
1127 | + * `Issue #327`_: Merged pull request #24 to fix a dependency problem with pip. |
1128 | * Merged pull request #23 to fix https://github.com/pypa/virtualenv/issues/301. |
1129 | * If Sphinx is installed, the `upload_docs` command now runs `build_sphinx` |
1130 | to produce uploadable documentation. |
1131 | - * Issue #326: `upload_docs` provided mangled auth credentials under Python 3. |
1132 | - * Issue #320: Fix check for "createable" in distribute_setup.py. |
1133 | - * Issue #305: Remove a warning that was triggered during normal operations. |
1134 | - * Issue #311: Print metadata in UTF-8 independent of platform. |
1135 | - * Issue #303: Read manifest file with UTF-8 encoding under Python 3. |
1136 | - * Issue #301: Allow to run tests of namespace packages when using 2to3. |
1137 | - * Issue #304: Prevent import loop in site.py under Python 3.3. |
1138 | - * Issue #283: Reenable scanning of `*.pyc` / `*.pyo` files on Python 3.3. |
1139 | - * Issue #299: The develop command didn't work on Python 3, when using 2to3, |
1140 | + * `Issue #326`_: `upload_docs` provided mangled auth credentials under Python 3. |
1141 | + * `Issue #320`_: Fix check for "createable" in distribute_setup.py. |
1142 | + * `Issue #305`_: Remove a warning that was triggered during normal operations. |
1143 | + * `Issue #311`_: Print metadata in UTF-8 independent of platform. |
1144 | + * `Issue #303`_: Read manifest file with UTF-8 encoding under Python 3. |
1145 | + * `Issue #301`_: Allow to run tests of namespace packages when using 2to3. |
1146 | + * `Issue #304`_: Prevent import loop in site.py under Python 3.3. |
1147 | + * `Issue #283`_: Reenable scanning of `*.pyc` / `*.pyo` files on Python 3.3. |
1148 | + * `Issue #299`_: The develop command didn't work on Python 3, when using 2to3, |
1149 | as the egg link would go to the Python 2 source. Linking to the 2to3'd code |
1150 | in build/lib makes it work, although you will have to rebuild the module |
1151 | before testing it. |
1152 | - * Issue #306: Even if 2to3 is used, we build in-place under Python 2. |
1153 | - * Issue #307: Prints the full path when .svn/entries is broken. |
1154 | - * Issue #313: Support for sdist subcommands (Python 2.7) |
1155 | - * Issue #314: test_local_index() would fail an OS X. |
1156 | - * Issue #310: Non-ascii characters in a namespace __init__.py causes errors. |
1157 | - * Issue #218: Improved documentation on behavior of `package_data` and |
1158 | + * `Issue #306`_: Even if 2to3 is used, we build in-place under Python 2. |
1159 | + * `Issue #307`_: Prints the full path when .svn/entries is broken. |
1160 | + * `Issue #313`_: Support for sdist subcommands (Python 2.7) |
1161 | + * `Issue #314`_: test_local_index() would fail an OS X. |
1162 | + * `Issue #310`_: Non-ascii characters in a namespace __init__.py causes errors. |
1163 | + * `Issue #218`_: Improved documentation on behavior of `package_data` and |
1164 | `include_package_data`. Files indicated by `package_data` are now included |
1165 | in the manifest. |
1166 | * `distribute_setup.py` now allows a `--download-base` argument for retrieving |
1167 | @@ -281,10 +335,10 @@ |
1168 | 0.6.28 |
1169 | ------ |
1170 | |
1171 | - * Issue #294: setup.py can now be invoked from any directory. |
1172 | + * `Issue #294`_: setup.py can now be invoked from any directory. |
1173 | * Scripts are now installed honoring the umask. |
1174 | * Added support for .dist-info directories. |
1175 | - * Issue #283: Fix and disable scanning of `*.pyc` / `*.pyo` files on |
1176 | + * `Issue #283`_: Fix and disable scanning of `*.pyc` / `*.pyo` files on |
1177 | Python 3.3. |
1178 | |
1179 | ------ |
1180 | @@ -295,15 +349,15 @@ |
1181 | * Distribute now recognizes README.rst as a standard, default readme file. |
1182 | * Exclude 'encodings' modules when removing modules from sys.modules. |
1183 | Workaround for #285. |
1184 | - * Issue #231: Don't fiddle with system python when used with buildout |
1185 | + * `Issue #231`_: Don't fiddle with system python when used with buildout |
1186 | (bootstrap.py) |
1187 | |
1188 | ------ |
1189 | 0.6.26 |
1190 | ------ |
1191 | |
1192 | - * Issue #183: Symlinked files are now extracted from source distributions. |
1193 | - * Issue #227: Easy_install fetch parameters are now passed during the |
1194 | + * `Issue #183`_: Symlinked files are now extracted from source distributions. |
1195 | + * `Issue #227`_: Easy_install fetch parameters are now passed during the |
1196 | installation of a source distribution; now fulfillment of setup_requires |
1197 | dependencies will honor the parameters passed to easy_install. |
1198 | |
1199 | @@ -311,65 +365,65 @@ |
1200 | 0.6.25 |
1201 | ------ |
1202 | |
1203 | - * Issue #258: Workaround a cache issue |
1204 | - * Issue #260: distribute_setup.py now accepts the --user parameter for |
1205 | + * `Issue #258`_: Workaround a cache issue |
1206 | + * `Issue #260`_: distribute_setup.py now accepts the --user parameter for |
1207 | Python 2.6 and later. |
1208 | - * Issue #262: package_index.open_with_auth no longer throws LookupError |
1209 | + * `Issue #262`_: package_index.open_with_auth no longer throws LookupError |
1210 | on Python 3. |
1211 | - * Issue #269: AttributeError when an exception occurs reading Manifest.in |
1212 | + * `Issue #269`_: AttributeError when an exception occurs reading Manifest.in |
1213 | on late releases of Python. |
1214 | - * Issue #272: Prevent TypeError when namespace package names are unicode |
1215 | - and single-install-externally-managed is used. Also fixes PIP issue |
1216 | - 449. |
1217 | - * Issue #273: Legacy script launchers now install with Python2/3 support. |
1218 | + * `Issue #272`_: Prevent TypeError when namespace package names are unicode |
1219 | + and single-install-externally-managed is used. Also fixes PIP `issue |
1220 | + 449`_. |
1221 | + * `Issue #273`_: Legacy script launchers now install with Python2/3 support. |
1222 | |
1223 | ------ |
1224 | 0.6.24 |
1225 | ------ |
1226 | |
1227 | - * Issue #249: Added options to exclude 2to3 fixers |
1228 | + * `Issue #249`_: Added options to exclude 2to3 fixers |
1229 | |
1230 | ------ |
1231 | 0.6.23 |
1232 | ------ |
1233 | |
1234 | - * Issue #244: Fixed a test |
1235 | - * Issue #243: Fixed a test |
1236 | - * Issue #239: Fixed a test |
1237 | - * Issue #240: Fixed a test |
1238 | - * Issue #241: Fixed a test |
1239 | - * Issue #237: Fixed a test |
1240 | - * Issue #238: easy_install now uses 64bit executable wrappers on 64bit Python |
1241 | - * Issue #208: Fixed parsed_versions, it now honors post-releases as noted in the documentation |
1242 | - * Issue #207: Windows cli and gui wrappers pass CTRL-C to child python process |
1243 | - * Issue #227: easy_install now passes its arguments to setup.py bdist_egg |
1244 | - * Issue #225: Fixed a NameError on Python 2.5, 2.4 |
1245 | + * `Issue #244`_: Fixed a test |
1246 | + * `Issue #243`_: Fixed a test |
1247 | + * `Issue #239`_: Fixed a test |
1248 | + * `Issue #240`_: Fixed a test |
1249 | + * `Issue #241`_: Fixed a test |
1250 | + * `Issue #237`_: Fixed a test |
1251 | + * `Issue #238`_: easy_install now uses 64bit executable wrappers on 64bit Python |
1252 | + * `Issue #208`_: Fixed parsed_versions, it now honors post-releases as noted in the documentation |
1253 | + * `Issue #207`_: Windows cli and gui wrappers pass CTRL-C to child python process |
1254 | + * `Issue #227`_: easy_install now passes its arguments to setup.py bdist_egg |
1255 | + * `Issue #225`_: Fixed a NameError on Python 2.5, 2.4 |
1256 | |
1257 | ------ |
1258 | 0.6.21 |
1259 | ------ |
1260 | |
1261 | - * Issue #225: FIxed a regression on py2.4 |
1262 | + * `Issue #225`_: FIxed a regression on py2.4 |
1263 | |
1264 | ------ |
1265 | 0.6.20 |
1266 | ------ |
1267 | |
1268 | - * Issue #135: Include url in warning when processing URLs in package_index. |
1269 | - * Issue #212: Fix issue where easy_instal fails on Python 3 on windows installer. |
1270 | - * Issue #213: Fix typo in documentation. |
1271 | + * `Issue #135`_: Include url in warning when processing URLs in package_index. |
1272 | + * `Issue #212`_: Fix issue where easy_instal fails on Python 3 on windows installer. |
1273 | + * `Issue #213`_: Fix typo in documentation. |
1274 | |
1275 | ------ |
1276 | 0.6.19 |
1277 | ------ |
1278 | |
1279 | - * Issue 206: AttributeError: 'HTTPMessage' object has no attribute 'getheaders' |
1280 | + * `Issue 206`_: AttributeError: 'HTTPMessage' object has no attribute 'getheaders' |
1281 | |
1282 | ------ |
1283 | 0.6.18 |
1284 | ------ |
1285 | |
1286 | - * Issue 210: Fixed a regression introduced by Issue 204 fix. |
1287 | + * `Issue 210`_: Fixed a regression introduced by `Issue 204`_ fix. |
1288 | |
1289 | ------ |
1290 | 0.6.17 |
1291 | @@ -378,21 +432,21 @@ |
1292 | * Support 'DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT' environment |
1293 | variable to allow to disable installation of easy_install-${version} script. |
1294 | * Support Python >=3.1.4 and >=3.2.1. |
1295 | - * Issue 204: Don't try to import the parent of a namespace package in |
1296 | + * `Issue 204`_: Don't try to import the parent of a namespace package in |
1297 | declare_namespace |
1298 | - * Issue 196: Tolerate responses with multiple Content-Length headers |
1299 | - * Issue 205: Sandboxing doesn't preserve working_set. Leads to setup_requires |
1300 | + * `Issue 196`_: Tolerate responses with multiple Content-Length headers |
1301 | + * `Issue 205`_: Sandboxing doesn't preserve working_set. Leads to setup_requires |
1302 | problems. |
1303 | |
1304 | ------ |
1305 | 0.6.16 |
1306 | ------ |
1307 | |
1308 | - * Builds sdist gztar even on Windows (avoiding Issue 193). |
1309 | - * Issue 192: Fixed metadata omitted on Windows when package_dir |
1310 | + * Builds sdist gztar even on Windows (avoiding `Issue 193`_). |
1311 | + * `Issue 192`_: Fixed metadata omitted on Windows when package_dir |
1312 | specified with forward-slash. |
1313 | - * Issue 195: Cython build support. |
1314 | - * Issue 200: Issues with recognizing 64-bit packages on Windows. |
1315 | + * `Issue 195`_: Cython build support. |
1316 | + * `Issue 200`_: Issues with recognizing 64-bit packages on Windows. |
1317 | |
1318 | ------ |
1319 | 0.6.15 |
1320 | @@ -400,49 +454,49 @@ |
1321 | |
1322 | * Fixed typo in bdist_egg |
1323 | * Several issues under Python 3 has been solved. |
1324 | - * Issue 146: Fixed missing DLL files after easy_install of windows exe package. |
1325 | + * `Issue 146`_: Fixed missing DLL files after easy_install of windows exe package. |
1326 | |
1327 | ------ |
1328 | 0.6.14 |
1329 | ------ |
1330 | |
1331 | - * Issue 170: Fixed unittest failure. Thanks to Toshio. |
1332 | - * Issue 171: Fixed race condition in unittests cause deadlocks in test suite. |
1333 | - * Issue 143: Fixed a lookup issue with easy_install. |
1334 | + * `Issue 170`_: Fixed unittest failure. Thanks to Toshio. |
1335 | + * `Issue 171`_: Fixed race condition in unittests cause deadlocks in test suite. |
1336 | + * `Issue 143`_: Fixed a lookup issue with easy_install. |
1337 | Thanks to David and Zooko. |
1338 | - * Issue 174: Fixed the edit mode when its used with setuptools itself |
1339 | + * `Issue 174`_: Fixed the edit mode when its used with setuptools itself |
1340 | |
1341 | ------ |
1342 | 0.6.13 |
1343 | ------ |
1344 | |
1345 | - * Issue 160: 2.7 gives ValueError("Invalid IPv6 URL") |
1346 | - * Issue 150: Fixed using ~/.local even in a --no-site-packages virtualenv |
1347 | - * Issue 163: scan index links before external links, and don't use the md5 when |
1348 | + * `Issue 160`_: 2.7 gives ValueError("Invalid IPv6 URL") |
1349 | + * `Issue 150`_: Fixed using ~/.local even in a --no-site-packages virtualenv |
1350 | + * `Issue 163`_: scan index links before external links, and don't use the md5 when |
1351 | comparing two distributions |
1352 | |
1353 | ------ |
1354 | 0.6.12 |
1355 | ------ |
1356 | |
1357 | - * Issue 149: Fixed various failures on 2.3/2.4 |
1358 | + * `Issue 149`_: Fixed various failures on 2.3/2.4 |
1359 | |
1360 | ------ |
1361 | 0.6.11 |
1362 | ------ |
1363 | |
1364 | * Found another case of SandboxViolation - fixed |
1365 | - * Issue 15 and 48: Introduced a socket timeout of 15 seconds on url openings |
1366 | + * `Issue 15`_ and 48: Introduced a socket timeout of 15 seconds on url openings |
1367 | * Added indexsidebar.html into MANIFEST.in |
1368 | - * Issue 108: Fixed TypeError with Python3.1 |
1369 | - * Issue 121: Fixed --help install command trying to actually install. |
1370 | - * Issue 112: Added an os.makedirs so that Tarek's solution will work. |
1371 | - * Issue 133: Added --no-find-links to easy_install |
1372 | + * `Issue 108`_: Fixed TypeError with Python3.1 |
1373 | + * `Issue 121`_: Fixed --help install command trying to actually install. |
1374 | + * `Issue 112`_: Added an os.makedirs so that Tarek's solution will work. |
1375 | + * `Issue 133`_: Added --no-find-links to easy_install |
1376 | * Added easy_install --user |
1377 | - * Issue 100: Fixed develop --user not taking '.' in PYTHONPATH into account |
1378 | - * Issue 134: removed spurious UserWarnings. Patch by VanLindberg |
1379 | - * Issue 138: cant_write_to_target error when setup_requires is used. |
1380 | - * Issue 147: respect the sys.dont_write_bytecode flag |
1381 | + * `Issue 100`_: Fixed develop --user not taking '.' in PYTHONPATH into account |
1382 | + * `Issue 134`_: removed spurious UserWarnings. Patch by VanLindberg |
1383 | + * `Issue 138`_: cant_write_to_target error when setup_requires is used. |
1384 | + * `Issue 147`_: respect the sys.dont_write_bytecode flag |
1385 | |
1386 | ------ |
1387 | 0.6.10 |
1388 | @@ -456,27 +510,27 @@ |
1389 | 0.6.9 |
1390 | ----- |
1391 | |
1392 | - * Issue 90: unknown setuptools version can be added in the working set |
1393 | - * Issue 87: setupt.py doesn't try to convert distribute_setup.py anymore |
1394 | + * `Issue 90`_: unknown setuptools version can be added in the working set |
1395 | + * `Issue 87`_: setupt.py doesn't try to convert distribute_setup.py anymore |
1396 | Initial Patch by arfrever. |
1397 | - * Issue 89: added a side bar with a download link to the doc. |
1398 | - * Issue 86: fixed missing sentence in pkg_resources doc. |
1399 | + * `Issue 89`_: added a side bar with a download link to the doc. |
1400 | + * `Issue 86`_: fixed missing sentence in pkg_resources doc. |
1401 | * Added a nicer error message when a DistributionNotFound is raised. |
1402 | - * Issue 80: test_develop now works with Python 3.1 |
1403 | - * Issue 93: upload_docs now works if there is an empty sub-directory. |
1404 | - * Issue 70: exec bit on non-exec files |
1405 | - * Issue 99: now the standalone easy_install command doesn't uses a |
1406 | + * `Issue 80`_: test_develop now works with Python 3.1 |
1407 | + * `Issue 93`_: upload_docs now works if there is an empty sub-directory. |
1408 | + * `Issue 70`_: exec bit on non-exec files |
1409 | + * `Issue 99`_: now the standalone easy_install command doesn't uses a |
1410 | "setup.cfg" if any exists in the working directory. It will use it |
1411 | only if triggered by ``install_requires`` from a setup.py call |
1412 | (install, develop, etc). |
1413 | - * Issue 101: Allowing ``os.devnull`` in Sandbox |
1414 | - * Issue 92: Fixed the "no eggs" found error with MacPort |
1415 | + * `Issue 101`_: Allowing ``os.devnull`` in Sandbox |
1416 | + * `Issue 92`_: Fixed the "no eggs" found error with MacPort |
1417 | (platform.mac_ver() fails) |
1418 | - * Issue 103: test_get_script_header_jython_workaround not run |
1419 | + * `Issue 103`_: test_get_script_header_jython_workaround not run |
1420 | anymore under py3 with C or POSIX local. Contributed by Arfrever. |
1421 | - * Issue 104: remvoved the assertion when the installation fails, |
1422 | + * `Issue 104`_: remvoved the assertion when the installation fails, |
1423 | with a nicer message for the end user. |
1424 | - * Issue 100: making sure there's no SandboxViolation when |
1425 | + * `Issue 100`_: making sure there's no SandboxViolation when |
1426 | the setup script patches setuptools. |
1427 | |
1428 | ----- |
1429 | @@ -490,8 +544,8 @@ |
1430 | 0.6.7 |
1431 | ----- |
1432 | |
1433 | - * Issue 58: Added --user support to the develop command |
1434 | - * Issue 11: Generated scripts now wrap their call to the script entry point |
1435 | + * `Issue 58`_: Added --user support to the develop command |
1436 | + * `Issue 11`_: Generated scripts now wrap their call to the script entry point |
1437 | in the standard "if name == 'main'" |
1438 | * Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv |
1439 | can drive an installation that doesn't patch a global setuptools. |
1440 | @@ -499,17 +553,17 @@ |
1441 | http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 |
1442 | and determined that it no longer applies. Distribute should work fine with |
1443 | Unladen Swallow 2009Q3. |
1444 | - * Issue 21: Allow PackageIndex.open_url to gracefully handle all cases of a |
1445 | + * `Issue 21`_: Allow PackageIndex.open_url to gracefully handle all cases of a |
1446 | httplib.HTTPException instead of just InvalidURL and BadStatusLine. |
1447 | * Removed virtual-python.py from this distribution and updated documentation |
1448 | to point to the actively maintained virtualenv instead. |
1449 | - * Issue 64: use_setuptools no longer rebuilds the distribute egg every |
1450 | + * `Issue 64`_: use_setuptools no longer rebuilds the distribute egg every |
1451 | time it is run |
1452 | * use_setuptools now properly respects the requested version |
1453 | * use_setuptools will no longer try to import a distribute egg for the |
1454 | wrong Python version |
1455 | - * Issue 74: no_fake should be True by default. |
1456 | - * Issue 72: avoid a bootstrapping issue with easy_install -U |
1457 | + * `Issue 74`_: no_fake should be True by default. |
1458 | + * `Issue 72`_: avoid a bootstrapping issue with easy_install -U |
1459 | |
1460 | ----- |
1461 | 0.6.6 |
1462 | @@ -522,10 +576,10 @@ |
1463 | 0.6.5 |
1464 | ----- |
1465 | |
1466 | - * Issue 65: cli.exe and gui.exe are now generated at build time, |
1467 | + * `Issue 65`_: cli.exe and gui.exe are now generated at build time, |
1468 | depending on the platform in use. |
1469 | |
1470 | - * Issue 67: Fixed doc typo (PEP 381/382) |
1471 | + * `Issue 67`_: Fixed doc typo (PEP 381/382) |
1472 | |
1473 | * Distribute no longer shadows setuptools if we require a 0.7-series |
1474 | setuptools. And an error is raised when installing a 0.7 setuptools with |
1475 | @@ -542,11 +596,10 @@ |
1476 | ----- |
1477 | |
1478 | * Added the generation of `distribute_setup_3k.py` during the release. |
1479 | - This close http://bitbucket.org/tarek/distribute/issue/52. |
1480 | + This closes `issue #52`_. |
1481 | |
1482 | * Added an upload_docs command to easily upload project documentation to |
1483 | - PyPI's http://packages.python.org. |
1484 | - This close http://bitbucket.org/tarek/distribute/issue/56. |
1485 | + PyPI's http://packages.python.org. This close `issue #56`_. |
1486 | |
1487 | * Fixed a bootstrap bug on the use_setuptools() API. |
1488 | |
1489 | @@ -572,31 +625,29 @@ |
1490 | ========== |
1491 | |
1492 | * Added Python 3 support; see docs/python3.txt. |
1493 | - This closes http://bugs.python.org/setuptools/issue39. |
1494 | + This closes http://bugs.python.org/setuptools/`issue39`_. |
1495 | |
1496 | * Added option to run 2to3 automatically when installing on Python 3. |
1497 | - This closes http://bitbucket.org/tarek/distribute/issue/31. |
1498 | + This closes `issue #31`_. |
1499 | |
1500 | * Fixed invalid usage of requirement.parse, that broke develop -d. |
1501 | - This closes http://bugs.python.org/setuptools/issue44. |
1502 | + This closes http://bugs.python.org/setuptools/`issue44`_. |
1503 | |
1504 | * Fixed script launcher for 64-bit Windows. |
1505 | - This closes http://bugs.python.org/setuptools/issue2. |
1506 | + This closes http://bugs.python.org/setuptools/`issue2`_. |
1507 | |
1508 | * KeyError when compiling extensions. |
1509 | - This closes http://bugs.python.org/setuptools/issue41. |
1510 | + This closes http://bugs.python.org/setuptools/`issue41`_. |
1511 | |
1512 | bootstrapping |
1513 | ============= |
1514 | |
1515 | - * Fixed bootstrap not working on Windows. |
1516 | - This closes http://bitbucket.org/tarek/distribute/issue/49. |
1517 | + * Fixed bootstrap not working on Windows. This closes `issue #49`_. |
1518 | |
1519 | - * Fixed 2.6 dependencies. |
1520 | - This closes http://bitbucket.org/tarek/distribute/issue/50. |
1521 | + * Fixed 2.6 dependencies. This closes `issue #50`_. |
1522 | |
1523 | * Make sure setuptools is patched when running through easy_install |
1524 | - This closes http://bugs.python.org/setuptools/issue40. |
1525 | + This closes http://bugs.python.org/setuptools/`issue40`_. |
1526 | |
1527 | ----- |
1528 | 0.6.1 |
1529 | @@ -606,16 +657,14 @@ |
1530 | ========== |
1531 | |
1532 | * package_index.urlopen now catches BadStatusLine and malformed url errors. |
1533 | - This closes http://bitbucket.org/tarek/distribute/issue/16 and |
1534 | - http://bitbucket.org/tarek/distribute/issue/18. |
1535 | + This closes `issue #16`_ and `issue #18`_. |
1536 | |
1537 | * zip_ok is now False by default. This closes |
1538 | - http://bugs.python.org/setuptools/issue33. |
1539 | - |
1540 | - * Fixed invalid URL error catching. http://bugs.python.org/setuptools/issue20. |
1541 | - |
1542 | - * Fixed invalid bootstraping with easy_install installation |
1543 | - http://bitbucket.org/tarek/distribute/issue/40. |
1544 | + http://bugs.python.org/setuptools/`issue33`_. |
1545 | + |
1546 | + * Fixed invalid URL error catching. http://bugs.python.org/setuptools/`issue20`_. |
1547 | + |
1548 | + * Fixed invalid bootstraping with easy_install installation (`issue #40`_). |
1549 | Thanks to Florian Schulze for the help. |
1550 | |
1551 | * Removed buildout/bootstrap.py. A new repository will create a specific |
1552 | @@ -627,7 +676,7 @@ |
1553 | |
1554 | * The boostrap process leave setuptools alone if detected in the system |
1555 | and --root or --prefix is provided, but is not in the same location. |
1556 | - This closes http://bitbucket.org/tarek/distribute/issue/10. |
1557 | + This closes `issue #10`_. |
1558 | |
1559 | --- |
1560 | 0.6 |
1561 | @@ -637,47 +686,165 @@ |
1562 | ========== |
1563 | |
1564 | * Packages required at build time where not fully present at install time. |
1565 | - This closes http://bitbucket.org/tarek/distribute/issue/12. |
1566 | - |
1567 | - * Protected against failures in tarfile extraction. This closes |
1568 | - http://bitbucket.org/tarek/distribute/issue/10. |
1569 | - |
1570 | - * Made Jython api_tests.txt doctest compatible. This closes |
1571 | - http://bitbucket.org/tarek/distribute/issue/7. |
1572 | + This closes `issue #12`_. |
1573 | + |
1574 | + * Protected against failures in tarfile extraction. This closes `issue #10`_. |
1575 | + |
1576 | + * Made Jython api_tests.txt doctest compatible. This closes `issue #7`_. |
1577 | |
1578 | * sandbox.py replaced builtin type file with builtin function open. This |
1579 | - closes http://bitbucket.org/tarek/distribute/issue/6. |
1580 | - |
1581 | - * Immediately close all file handles. This closes |
1582 | - http://bitbucket.org/tarek/distribute/issue/3. |
1583 | - |
1584 | - * Added compatibility with Subversion 1.6. This references |
1585 | - http://bitbucket.org/tarek/distribute/issue/1. |
1586 | + closes `issue #6`_. |
1587 | + |
1588 | + * Immediately close all file handles. This closes `issue #3`_. |
1589 | + |
1590 | + * Added compatibility with Subversion 1.6. This references `issue #1`_. |
1591 | |
1592 | pkg_resources |
1593 | ============= |
1594 | |
1595 | * Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API |
1596 | - instead. Based on a patch from ronaldoussoren. This closes |
1597 | - http://bitbucket.org/tarek/distribute/issue/5. |
1598 | + instead. Based on a patch from ronaldoussoren. This closes `issue #5`_. |
1599 | |
1600 | * Fixed a SandboxViolation for mkdir that could occur in certain cases. |
1601 | - This closes http://bitbucket.org/tarek/distribute/issue/13. |
1602 | + This closes `issue #13`_. |
1603 | |
1604 | * Allow to find_on_path on systems with tight permissions to fail gracefully. |
1605 | - This closes http://bitbucket.org/tarek/distribute/issue/9. |
1606 | + This closes `issue #9`_. |
1607 | |
1608 | * Corrected inconsistency between documentation and code of add_entry. |
1609 | - This closes http://bitbucket.org/tarek/distribute/issue/8. |
1610 | + This closes `issue #8`_. |
1611 | |
1612 | - * Immediately close all file handles. This closes |
1613 | - http://bitbucket.org/tarek/distribute/issue/3. |
1614 | + * Immediately close all file handles. This closes `issue #3`_. |
1615 | |
1616 | easy_install |
1617 | ============ |
1618 | |
1619 | - * Immediately close all file handles. This closes |
1620 | - http://bitbucket.org/tarek/distribute/issue/3. |
1621 | + * Immediately close all file handles. This closes `issue #3`_. |
1622 | + |
1623 | + |
1624 | + .. _`Issue #135`: http://bitbucket.org/tarek/distribute/issue/135 |
1625 | + .. _`Issue #183`: http://bitbucket.org/tarek/distribute/issue/183 |
1626 | + .. _`Issue #207`: http://bitbucket.org/tarek/distribute/issue/207 |
1627 | + .. _`Issue #208`: http://bitbucket.org/tarek/distribute/issue/208 |
1628 | + .. _`Issue #212`: http://bitbucket.org/tarek/distribute/issue/212 |
1629 | + .. _`Issue #213`: http://bitbucket.org/tarek/distribute/issue/213 |
1630 | + .. _`Issue #218`: http://bitbucket.org/tarek/distribute/issue/218 |
1631 | + .. _`Issue #225`: http://bitbucket.org/tarek/distribute/issue/225 |
1632 | + .. _`Issue #227`: http://bitbucket.org/tarek/distribute/issue/227 |
1633 | + .. _`Issue #231`: http://bitbucket.org/tarek/distribute/issue/231 |
1634 | + .. _`Issue #237`: http://bitbucket.org/tarek/distribute/issue/237 |
1635 | + .. _`Issue #238`: http://bitbucket.org/tarek/distribute/issue/238 |
1636 | + .. _`Issue #239`: http://bitbucket.org/tarek/distribute/issue/239 |
1637 | + .. _`Issue #240`: http://bitbucket.org/tarek/distribute/issue/240 |
1638 | + .. _`Issue #241`: http://bitbucket.org/tarek/distribute/issue/241 |
1639 | + .. _`Issue #243`: http://bitbucket.org/tarek/distribute/issue/243 |
1640 | + .. _`Issue #244`: http://bitbucket.org/tarek/distribute/issue/244 |
1641 | + .. _`Issue #249`: http://bitbucket.org/tarek/distribute/issue/249 |
1642 | + .. _`Issue #258`: http://bitbucket.org/tarek/distribute/issue/258 |
1643 | + .. _`Issue #260`: http://bitbucket.org/tarek/distribute/issue/260 |
1644 | + .. _`Issue #262`: http://bitbucket.org/tarek/distribute/issue/262 |
1645 | + .. _`Issue #269`: http://bitbucket.org/tarek/distribute/issue/269 |
1646 | + .. _`Issue #272`: http://bitbucket.org/tarek/distribute/issue/272 |
1647 | + .. _`Issue #273`: http://bitbucket.org/tarek/distribute/issue/273 |
1648 | + .. _`Issue #283`: http://bitbucket.org/tarek/distribute/issue/283 |
1649 | + .. _`Issue #294`: http://bitbucket.org/tarek/distribute/issue/294 |
1650 | + .. _`Issue #299`: http://bitbucket.org/tarek/distribute/issue/299 |
1651 | + .. _`Issue #301`: http://bitbucket.org/tarek/distribute/issue/301 |
1652 | + .. _`Issue #303`: http://bitbucket.org/tarek/distribute/issue/303 |
1653 | + .. _`Issue #304`: http://bitbucket.org/tarek/distribute/issue/304 |
1654 | + .. _`Issue #305`: http://bitbucket.org/tarek/distribute/issue/305 |
1655 | + .. _`Issue #306`: http://bitbucket.org/tarek/distribute/issue/306 |
1656 | + .. _`Issue #307`: http://bitbucket.org/tarek/distribute/issue/307 |
1657 | + .. _`Issue #310`: http://bitbucket.org/tarek/distribute/issue/310 |
1658 | + .. _`Issue #311`: http://bitbucket.org/tarek/distribute/issue/311 |
1659 | + .. _`Issue #313`: http://bitbucket.org/tarek/distribute/issue/313 |
1660 | + .. _`Issue #314`: http://bitbucket.org/tarek/distribute/issue/314 |
1661 | + .. _`Issue #320`: http://bitbucket.org/tarek/distribute/issue/320 |
1662 | + .. _`Issue #323`: http://bitbucket.org/tarek/distribute/issue/323 |
1663 | + .. _`Issue #326`: http://bitbucket.org/tarek/distribute/issue/326 |
1664 | + .. _`Issue #327`: http://bitbucket.org/tarek/distribute/issue/327 |
1665 | + .. _`Issue #328`: http://bitbucket.org/tarek/distribute/issue/328 |
1666 | + .. _`Issue #329`: http://bitbucket.org/tarek/distribute/issue/329 |
1667 | + .. _`Issue #334`: http://bitbucket.org/tarek/distribute/issue/334 |
1668 | + .. _`Issue #335`: http://bitbucket.org/tarek/distribute/issue/335 |
1669 | + .. _`Issue #336`: http://bitbucket.org/tarek/distribute/issue/336 |
1670 | + .. _`Issue #341`: http://bitbucket.org/tarek/distribute/issue/341 |
1671 | + .. _`Issue 100`: http://bitbucket.org/tarek/distribute/issue/100 |
1672 | + .. _`Issue 101`: http://bitbucket.org/tarek/distribute/issue/101 |
1673 | + .. _`Issue 103`: http://bitbucket.org/tarek/distribute/issue/103 |
1674 | + .. _`Issue 104`: http://bitbucket.org/tarek/distribute/issue/104 |
1675 | + .. _`Issue 108`: http://bitbucket.org/tarek/distribute/issue/108 |
1676 | + .. _`Issue 11`: http://bitbucket.org/tarek/distribute/issue/11 |
1677 | + .. _`Issue 112`: http://bitbucket.org/tarek/distribute/issue/112 |
1678 | + .. _`Issue 121`: http://bitbucket.org/tarek/distribute/issue/121 |
1679 | + .. _`Issue 133`: http://bitbucket.org/tarek/distribute/issue/133 |
1680 | + .. _`Issue 134`: http://bitbucket.org/tarek/distribute/issue/134 |
1681 | + .. _`Issue 138`: http://bitbucket.org/tarek/distribute/issue/138 |
1682 | + .. _`Issue 143`: http://bitbucket.org/tarek/distribute/issue/143 |
1683 | + .. _`Issue 146`: http://bitbucket.org/tarek/distribute/issue/146 |
1684 | + .. _`Issue 147`: http://bitbucket.org/tarek/distribute/issue/147 |
1685 | + .. _`Issue 149`: http://bitbucket.org/tarek/distribute/issue/149 |
1686 | + .. _`Issue 15`: http://bitbucket.org/tarek/distribute/issue/15 |
1687 | + .. _`Issue 150`: http://bitbucket.org/tarek/distribute/issue/150 |
1688 | + .. _`Issue 160`: http://bitbucket.org/tarek/distribute/issue/160 |
1689 | + .. _`Issue 163`: http://bitbucket.org/tarek/distribute/issue/163 |
1690 | + .. _`Issue 170`: http://bitbucket.org/tarek/distribute/issue/170 |
1691 | + .. _`Issue 171`: http://bitbucket.org/tarek/distribute/issue/171 |
1692 | + .. _`Issue 174`: http://bitbucket.org/tarek/distribute/issue/174 |
1693 | + .. _`Issue 192`: http://bitbucket.org/tarek/distribute/issue/192 |
1694 | + .. _`Issue 193`: http://bitbucket.org/tarek/distribute/issue/193 |
1695 | + .. _`Issue 195`: http://bitbucket.org/tarek/distribute/issue/195 |
1696 | + .. _`Issue 196`: http://bitbucket.org/tarek/distribute/issue/196 |
1697 | + .. _`Issue 200`: http://bitbucket.org/tarek/distribute/issue/200 |
1698 | + .. _`Issue 204`: http://bitbucket.org/tarek/distribute/issue/204 |
1699 | + .. _`Issue 205`: http://bitbucket.org/tarek/distribute/issue/205 |
1700 | + .. _`Issue 206`: http://bitbucket.org/tarek/distribute/issue/206 |
1701 | + .. _`Issue 21`: http://bitbucket.org/tarek/distribute/issue/21 |
1702 | + .. _`Issue 210`: http://bitbucket.org/tarek/distribute/issue/210 |
1703 | + .. _`Issue 58`: http://bitbucket.org/tarek/distribute/issue/58 |
1704 | + .. _`Issue 64`: http://bitbucket.org/tarek/distribute/issue/64 |
1705 | + .. _`Issue 65`: http://bitbucket.org/tarek/distribute/issue/65 |
1706 | + .. _`Issue 67`: http://bitbucket.org/tarek/distribute/issue/67 |
1707 | + .. _`Issue 70`: http://bitbucket.org/tarek/distribute/issue/70 |
1708 | + .. _`Issue 72`: http://bitbucket.org/tarek/distribute/issue/72 |
1709 | + .. _`Issue 74`: http://bitbucket.org/tarek/distribute/issue/74 |
1710 | + .. _`Issue 80`: http://bitbucket.org/tarek/distribute/issue/80 |
1711 | + .. _`Issue 86`: http://bitbucket.org/tarek/distribute/issue/86 |
1712 | + .. _`Issue 87`: http://bitbucket.org/tarek/distribute/issue/87 |
1713 | + .. _`Issue 89`: http://bitbucket.org/tarek/distribute/issue/89 |
1714 | + .. _`Issue 90`: http://bitbucket.org/tarek/distribute/issue/90 |
1715 | + .. _`Issue 92`: http://bitbucket.org/tarek/distribute/issue/92 |
1716 | + .. _`Issue 93`: http://bitbucket.org/tarek/distribute/issue/93 |
1717 | + .. _`Issue 99`: http://bitbucket.org/tarek/distribute/issue/99 |
1718 | + .. _`issue |
1719 | + 449`: http://bitbucket.org/tarek/distribute/issue/449 |
1720 | + .. _`issue #1`: http://bitbucket.org/tarek/distribute/issue/1 |
1721 | + .. _`issue #10`: http://bitbucket.org/tarek/distribute/issue/10 |
1722 | + .. _`issue #12`: http://bitbucket.org/tarek/distribute/issue/12 |
1723 | + .. _`issue #13`: http://bitbucket.org/tarek/distribute/issue/13 |
1724 | + .. _`issue #16`: http://bitbucket.org/tarek/distribute/issue/16 |
1725 | + .. _`issue #18`: http://bitbucket.org/tarek/distribute/issue/18 |
1726 | + .. _`issue #3`: http://bitbucket.org/tarek/distribute/issue/3 |
1727 | + .. _`issue #31`: http://bitbucket.org/tarek/distribute/issue/31 |
1728 | + .. _`issue #40`: http://bitbucket.org/tarek/distribute/issue/40 |
1729 | + .. _`issue #49`: http://bitbucket.org/tarek/distribute/issue/49 |
1730 | + .. _`issue #5`: http://bitbucket.org/tarek/distribute/issue/5 |
1731 | + .. _`issue #50`: http://bitbucket.org/tarek/distribute/issue/50 |
1732 | + .. _`issue #52`: http://bitbucket.org/tarek/distribute/issue/52 |
1733 | + .. _`issue #56`: http://bitbucket.org/tarek/distribute/issue/56 |
1734 | + .. _`issue #6`: http://bitbucket.org/tarek/distribute/issue/6 |
1735 | + .. _`issue #7`: http://bitbucket.org/tarek/distribute/issue/7 |
1736 | + .. _`issue #8`: http://bitbucket.org/tarek/distribute/issue/8 |
1737 | + .. _`issue #9`: http://bitbucket.org/tarek/distribute/issue/9 |
1738 | + .. _`issue1980`: http://bitbucket.org/tarek/distribute/issue/1980 |
1739 | + .. _`issue1981`: http://bitbucket.org/tarek/distribute/issue/1981 |
1740 | + .. _`issue2`: http://bitbucket.org/tarek/distribute/issue/2 |
1741 | + .. _`issue20`: http://bitbucket.org/tarek/distribute/issue/20 |
1742 | + .. _`issue33`: http://bitbucket.org/tarek/distribute/issue/33 |
1743 | + .. _`issue39`: http://bitbucket.org/tarek/distribute/issue/39 |
1744 | + .. _`issue40`: http://bitbucket.org/tarek/distribute/issue/40 |
1745 | + .. _`issue41`: http://bitbucket.org/tarek/distribute/issue/41 |
1746 | + .. _`issue44`: http://bitbucket.org/tarek/distribute/issue/44 |
1747 | |
1748 | |
1749 | Keywords: CPAN PyPI distutils eggs package management |
1750 | |
1751 | === modified file 'distribute_setup.py' |
1752 | --- distribute_setup.py 2012-11-19 17:10:25 +0000 |
1753 | +++ distribute_setup.py 2013-01-16 02:27:22 +0000 |
1754 | @@ -49,7 +49,7 @@ |
1755 | args = [quote(arg) for arg in args] |
1756 | return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 |
1757 | |
1758 | -DEFAULT_VERSION = "0.6.30" |
1759 | +DEFAULT_VERSION = "0.6.34" |
1760 | DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" |
1761 | SETUPTOOLS_FAKED_VERSION = "0.6c11" |
1762 | |
1763 | @@ -239,7 +239,9 @@ |
1764 | |
1765 | def _patch_file(path, content): |
1766 | """Will backup the file then patch it""" |
1767 | - existing_content = open(path).read() |
1768 | + f = open(path) |
1769 | + existing_content = f.read() |
1770 | + f.close() |
1771 | if existing_content == content: |
1772 | # already patched |
1773 | log.warn('Already patched.') |
1774 | @@ -257,7 +259,10 @@ |
1775 | |
1776 | |
1777 | def _same_content(path, content): |
1778 | - return open(path).read() == content |
1779 | + f = open(path) |
1780 | + existing_content = f.read() |
1781 | + f.close() |
1782 | + return existing_content == content |
1783 | |
1784 | |
1785 | def _rename_path(path): |
1786 | |
1787 | === modified file 'docs/build/html/_sources/setuptools.txt' |
1788 | --- docs/build/html/_sources/setuptools.txt 2012-10-21 19:41:01 +0000 |
1789 | +++ docs/build/html/_sources/setuptools.txt 2013-01-16 02:27:22 +0000 |
1790 | @@ -616,14 +616,20 @@ |
1791 | |
1792 | If your project depends on packages that aren't registered in PyPI, you may |
1793 | still be able to depend on them, as long as they are available for download |
1794 | -as an egg, in the standard distutils ``sdist`` format, or as a single ``.py`` |
1795 | -file. You just need to add some URLs to the ``dependency_links`` argument to |
1796 | +as: |
1797 | + |
1798 | +- an egg, in the standard distutils ``sdist`` format, |
1799 | +- a single ``.py`` file, or |
1800 | +- a VCS repository (Subversion, Mercurial, or Git). |
1801 | + |
1802 | +You just need to add some URLs to the ``dependency_links`` argument to |
1803 | ``setup()``. |
1804 | |
1805 | The URLs must be either: |
1806 | |
1807 | -1. direct download URLs, or |
1808 | -2. the URLs of web pages that contain direct download links |
1809 | +1. direct download URLs, |
1810 | +2. the URLs of web pages that contain direct download links, or |
1811 | +3. the repository's URL |
1812 | |
1813 | In general, it's better to link to web pages, because it is usually less |
1814 | complex to update a web page than to release a new version of your project. |
1815 | @@ -637,6 +643,27 @@ |
1816 | and automatically create a trivial ``setup.py`` to wrap the single ``.py`` file |
1817 | as an egg. |
1818 | |
1819 | +In the case of a VCS checkout, you should also append ``#egg=project-version`` |
1820 | +in order to identify for what package that checkout should be used. You can |
1821 | +append ``@REV`` to the URL's path (before the fragment) to specify a revision. |
1822 | +Additionally, you can also force the VCS being used by prepending the URL with |
1823 | +a certain prefix. Currently available are: |
1824 | + |
1825 | +- ``svn+URL`` for Subversion, |
1826 | +- ``git+URL`` for Git, and |
1827 | +- ``hg+URL`` for Mercurial |
1828 | + |
1829 | +A more complete example would be: |
1830 | + |
1831 | + ``vcs+proto://host/path@revision#egg=project-version`` |
1832 | + |
1833 | +Be careful with the version. It should match the one inside the project files. |
1834 | +If you want do disregard the version, you have to omit it both in the |
1835 | +``requires`` and in the URL's fragment. |
1836 | + |
1837 | +This will do a checkout (or a clone, in Git and Mercurial parlance) to a |
1838 | +temporary folder and run ``setup.py bdist_egg``. |
1839 | + |
1840 | The ``dependency_links`` option takes the form of a list of URL strings. For |
1841 | example, the below will cause EasyInstall to search the specified page for |
1842 | eggs or source distributions, if the package's dependencies aren't already |
1843 | |
1844 | === modified file 'docs/conf.py' |
1845 | --- docs/conf.py 2012-11-19 17:10:25 +0000 |
1846 | +++ docs/conf.py 2013-01-16 02:27:22 +0000 |
1847 | @@ -48,9 +48,9 @@ |
1848 | # built documents. |
1849 | # |
1850 | # The short X.Y version. |
1851 | -version = '0.6.30' |
1852 | +version = '0.6.34' |
1853 | # The full version, including alpha/beta/rc tags. |
1854 | -release = '0.6.30' |
1855 | +release = '0.6.34' |
1856 | |
1857 | # The language for content autogenerated by Sphinx. Refer to documentation |
1858 | # for a list of supported languages. |
1859 | |
1860 | === modified file 'docs/setuptools.txt' |
1861 | --- docs/setuptools.txt 2012-10-21 22:15:11 +0000 |
1862 | +++ docs/setuptools.txt 2013-01-16 02:27:22 +0000 |
1863 | @@ -616,14 +616,20 @@ |
1864 | |
1865 | If your project depends on packages that aren't registered in PyPI, you may |
1866 | still be able to depend on them, as long as they are available for download |
1867 | -as an egg, in the standard distutils ``sdist`` format, or as a single ``.py`` |
1868 | -file. You just need to add some URLs to the ``dependency_links`` argument to |
1869 | +as: |
1870 | + |
1871 | +- an egg, in the standard distutils ``sdist`` format, |
1872 | +- a single ``.py`` file, or |
1873 | +- a VCS repository (Subversion, Mercurial, or Git). |
1874 | + |
1875 | +You just need to add some URLs to the ``dependency_links`` argument to |
1876 | ``setup()``. |
1877 | |
1878 | The URLs must be either: |
1879 | |
1880 | -1. direct download URLs, or |
1881 | -2. the URLs of web pages that contain direct download links |
1882 | +1. direct download URLs, |
1883 | +2. the URLs of web pages that contain direct download links, or |
1884 | +3. the repository's URL |
1885 | |
1886 | In general, it's better to link to web pages, because it is usually less |
1887 | complex to update a web page than to release a new version of your project. |
1888 | @@ -637,6 +643,27 @@ |
1889 | and automatically create a trivial ``setup.py`` to wrap the single ``.py`` file |
1890 | as an egg. |
1891 | |
1892 | +In the case of a VCS checkout, you should also append ``#egg=project-version`` |
1893 | +in order to identify for what package that checkout should be used. You can |
1894 | +append ``@REV`` to the URL's path (before the fragment) to specify a revision. |
1895 | +Additionally, you can also force the VCS being used by prepending the URL with |
1896 | +a certain prefix. Currently available are: |
1897 | + |
1898 | +- ``svn+URL`` for Subversion, |
1899 | +- ``git+URL`` for Git, and |
1900 | +- ``hg+URL`` for Mercurial |
1901 | + |
1902 | +A more complete example would be: |
1903 | + |
1904 | + ``vcs+proto://host/path@revision#egg=project-version`` |
1905 | + |
1906 | +Be careful with the version. It should match the one inside the project files. |
1907 | +If you want do disregard the version, you have to omit it both in the |
1908 | +``requires`` and in the URL's fragment. |
1909 | + |
1910 | +This will do a checkout (or a clone, in Git and Mercurial parlance) to a |
1911 | +temporary folder and run ``setup.py bdist_egg``. |
1912 | + |
1913 | The ``dependency_links`` option takes the form of a list of URL strings. For |
1914 | example, the below will cause EasyInstall to search the specified page for |
1915 | eggs or source distributions, if the package's dependencies aren't already |
1916 | |
1917 | === modified file 'pkg_resources.py' |
1918 | --- pkg_resources.py 2012-10-21 22:15:11 +0000 |
1919 | +++ pkg_resources.py 2013-01-16 02:27:22 +0000 |
1920 | @@ -33,6 +33,12 @@ |
1921 | from os import open as os_open |
1922 | from os.path import isdir, split |
1923 | |
1924 | +# Avoid try/except due to potential problems with delayed import mechanisms. |
1925 | +if sys.version_info >= (3, 3) and sys.implementation.name == "cpython": |
1926 | + import importlib._bootstrap as importlib_bootstrap |
1927 | +else: |
1928 | + importlib_bootstrap = None |
1929 | + |
1930 | # This marker is used to simplify the process that checks is the |
1931 | # setuptools package was installed by the Setuptools project |
1932 | # or by the Distribute project, in case Setuptools creates |
1933 | @@ -1325,13 +1331,8 @@ |
1934 | |
1935 | register_loader_type(type(None), DefaultProvider) |
1936 | |
1937 | -try: |
1938 | - # CPython >=3.3 |
1939 | - import _frozen_importlib |
1940 | -except ImportError: |
1941 | - pass |
1942 | -else: |
1943 | - register_loader_type(_frozen_importlib.SourceFileLoader, DefaultProvider) |
1944 | +if importlib_bootstrap is not None: |
1945 | + register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider) |
1946 | |
1947 | |
1948 | class EmptyProvider(NullProvider): |
1949 | @@ -1760,20 +1761,20 @@ |
1950 | for dist in find_distributions(os.path.join(path_item, entry)): |
1951 | yield dist |
1952 | elif not only and lower.endswith('.egg-link'): |
1953 | - for line in open(os.path.join(path_item, entry)): |
1954 | + entry_file = open(os.path.join(path_item, entry)) |
1955 | + try: |
1956 | + entry_lines = entry_file.readlines() |
1957 | + finally: |
1958 | + entry_file.close() |
1959 | + for line in entry_lines: |
1960 | if not line.strip(): continue |
1961 | for item in find_distributions(os.path.join(path_item,line.rstrip())): |
1962 | yield item |
1963 | break |
1964 | register_finder(ImpWrapper,find_on_path) |
1965 | |
1966 | -try: |
1967 | - # CPython >=3.3 |
1968 | - import _frozen_importlib |
1969 | -except ImportError: |
1970 | - pass |
1971 | -else: |
1972 | - register_finder(_frozen_importlib.FileFinder, find_on_path) |
1973 | +if importlib_bootstrap is not None: |
1974 | + register_finder(importlib_bootstrap.FileFinder, find_on_path) |
1975 | |
1976 | _declare_state('dict', _namespace_handlers={}) |
1977 | _declare_state('dict', _namespace_packages={}) |
1978 | @@ -1874,13 +1875,8 @@ |
1979 | register_namespace_handler(ImpWrapper,file_ns_handler) |
1980 | register_namespace_handler(zipimport.zipimporter,file_ns_handler) |
1981 | |
1982 | -try: |
1983 | - # CPython >=3.3 |
1984 | - import _frozen_importlib |
1985 | -except ImportError: |
1986 | - pass |
1987 | -else: |
1988 | - register_namespace_handler(_frozen_importlib.FileFinder, file_ns_handler) |
1989 | +if importlib_bootstrap is not None: |
1990 | + register_namespace_handler(importlib_bootstrap.FileFinder, file_ns_handler) |
1991 | |
1992 | |
1993 | def null_ns_handler(importer, path_item, packageName, module): |
1994 | @@ -2120,7 +2116,7 @@ |
1995 | class Distribution(object): |
1996 | """Wrap an actual or potential sys.path entry w/metadata""" |
1997 | PKG_INFO = 'PKG-INFO' |
1998 | - |
1999 | + |
2000 | def __init__(self, |
2001 | location=None, metadata=None, project_name=None, version=None, |
2002 | py_version=PY_MAJOR, platform=None, precedence = EGG_DIST |
2003 | @@ -2459,7 +2455,7 @@ |
2004 | from email.parser import Parser |
2005 | self._pkg_info = Parser().parsestr(self.get_metadata(self.PKG_INFO)) |
2006 | return self._pkg_info |
2007 | - |
2008 | + |
2009 | @property |
2010 | def _dep_map(self): |
2011 | try: |
2012 | @@ -2470,7 +2466,7 @@ |
2013 | |
2014 | def _preparse_requirement(self, requires_dist): |
2015 | """Convert 'Foobar (1); baz' to ('Foobar ==1', 'baz') |
2016 | - Split environment marker, add == prefix to version specifiers as |
2017 | + Split environment marker, add == prefix to version specifiers as |
2018 | necessary, and remove parenthesis. |
2019 | """ |
2020 | parts = requires_dist.split(';', 1) + [''] |
2021 | @@ -2479,7 +2475,7 @@ |
2022 | distvers = re.sub(self.EQEQ, r"\1==\2\3", distvers) |
2023 | distvers = distvers.replace('(', '').replace(')', '') |
2024 | return (distvers, mark) |
2025 | - |
2026 | + |
2027 | def _compute_dependencies(self): |
2028 | """Recompute this distribution's dependencies.""" |
2029 | from _markerlib import compile as compile_marker |
2030 | @@ -2492,7 +2488,7 @@ |
2031 | parsed = parse_requirements(distvers).next() |
2032 | parsed.marker_fn = compile_marker(mark) |
2033 | reqs.append(parsed) |
2034 | - |
2035 | + |
2036 | def reqs_for_extra(extra): |
2037 | for req in reqs: |
2038 | if req.marker_fn(override={'extra':extra}): |
2039 | @@ -2500,13 +2496,13 @@ |
2040 | |
2041 | common = frozenset(reqs_for_extra(None)) |
2042 | dm[None].extend(common) |
2043 | - |
2044 | + |
2045 | for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: |
2046 | extra = safe_extra(extra.strip()) |
2047 | dm[extra] = list(frozenset(reqs_for_extra(extra)) - common) |
2048 | |
2049 | return dm |
2050 | - |
2051 | + |
2052 | |
2053 | _distributionImpl = {'.egg': Distribution, |
2054 | '.egg-info': Distribution, |
2055 | |
2056 | === modified file 'release.py' |
2057 | --- release.py 2012-11-19 17:10:25 +0000 |
2058 | +++ release.py 2013-01-16 02:27:22 +0000 |
2059 | @@ -20,7 +20,7 @@ |
2060 | except Exception: |
2061 | pass |
2062 | |
2063 | -VERSION = '0.6.30' |
2064 | +VERSION = '0.6.34' |
2065 | |
2066 | def get_next_version(): |
2067 | digits = map(int, VERSION.split('.')) |
2068 | |
2069 | === modified file 'setup.py' |
2070 | --- setup.py 2012-11-19 17:10:25 +0000 |
2071 | +++ setup.py 2013-01-16 02:27:22 +0000 |
2072 | @@ -3,6 +3,7 @@ |
2073 | import sys |
2074 | import os |
2075 | import textwrap |
2076 | +import re |
2077 | |
2078 | # Allow to run setup.py from another directory. |
2079 | os.chdir(os.path.dirname(os.path.abspath(__file__))) |
2080 | @@ -14,8 +15,10 @@ |
2081 | from distutils import dir_util, file_util, util, log |
2082 | log.set_verbosity(1) |
2083 | fl = FileList() |
2084 | - for line in open("MANIFEST.in"): |
2085 | + manifest_file = open("MANIFEST.in") |
2086 | + for line in manifest_file: |
2087 | fl.process_template_line(line) |
2088 | + manifest_file.close() |
2089 | dir_util.create_tree(tmp_src, fl.files) |
2090 | outfiles_2to3 = [] |
2091 | dist_script = os.path.join("build", "src", "distribute_setup.py") |
2092 | @@ -38,10 +41,12 @@ |
2093 | |
2094 | d = {} |
2095 | init_path = convert_path('setuptools/command/__init__.py') |
2096 | -exec(open(init_path).read(), d) |
2097 | +init_file = open(init_path) |
2098 | +exec(init_file.read(), d) |
2099 | +init_file.close() |
2100 | |
2101 | SETUP_COMMANDS = d['__all__'] |
2102 | -VERSION = "0.6.30" |
2103 | +VERSION = "0.6.34" |
2104 | |
2105 | from setuptools import setup, find_packages |
2106 | from setuptools.command.build_py import build_py as _build_py |
2107 | @@ -85,10 +90,8 @@ |
2108 | entry_points = os.path.join('distribute.egg-info', 'entry_points.txt') |
2109 | |
2110 | if not os.path.exists(entry_points): |
2111 | - try: |
2112 | - _test.run(self) |
2113 | - finally: |
2114 | - return |
2115 | + _test.run(self) |
2116 | + return # even though _test.run will raise SystemExit |
2117 | |
2118 | f = open(entry_points) |
2119 | |
2120 | @@ -135,6 +138,28 @@ |
2121 | from distribute_setup import _before_install |
2122 | _before_install() |
2123 | |
2124 | +# return contents of reStructureText file with linked issue references |
2125 | +def _linkified(rst_path): |
2126 | + bitroot = 'http://bitbucket.org/tarek/distribute' |
2127 | + revision = re.compile(r'\b(issue\s*#?\d+)\b', re.M | re.I) |
2128 | + |
2129 | + rst_file = open(rst_path) |
2130 | + rst_content = rst_file.read() |
2131 | + rst_file.close() |
2132 | + |
2133 | + anchors = revision.findall(rst_content) # ['Issue #43', ...] |
2134 | + anchors = sorted(set(anchors)) |
2135 | + rst_content = revision.sub(r'`\1`_', rst_content) |
2136 | + rst_content += "\n" |
2137 | + for x in anchors: |
2138 | + issue = re.findall(r'\d+', x)[0] |
2139 | + rst_content += '.. _`%s`: %s/issue/%s\n' % (x, bitroot, issue) |
2140 | + rst_content += "\n" |
2141 | + return rst_content |
2142 | + |
2143 | +readme_file = open('README.txt') |
2144 | +long_description = readme_file.read() + _linkified('CHANGES.txt') |
2145 | +readme_file.close() |
2146 | |
2147 | dist = setup( |
2148 | name="distribute", |
2149 | @@ -144,7 +169,7 @@ |
2150 | author="The fellowship of the packaging", |
2151 | author_email="distutils-sig@python.org", |
2152 | license="PSF or ZPL", |
2153 | - long_description = open('README.txt').read() + open('CHANGES.txt').read(), |
2154 | + long_description = long_description, |
2155 | keywords = "CPAN PyPI distutils eggs package management", |
2156 | url = "http://packages.python.org/distribute", |
2157 | test_suite = 'setuptools.tests', |
2158 | |
2159 | === modified file 'setuptools/command/develop.py' |
2160 | --- setuptools/command/develop.py 2012-10-21 19:41:01 +0000 |
2161 | +++ setuptools/command/develop.py 2013-01-16 02:27:22 +0000 |
2162 | @@ -132,7 +132,9 @@ |
2163 | def uninstall_link(self): |
2164 | if os.path.exists(self.egg_link): |
2165 | log.info("Removing %s (link to %s)", self.egg_link, self.egg_base) |
2166 | - contents = [line.rstrip() for line in open(self.egg_link)] |
2167 | + egg_link_file = open(self.egg_link) |
2168 | + contents = [line.rstrip() for line in egg_link_file] |
2169 | + egg_link_file.close() |
2170 | if contents not in ([self.egg_path], [self.egg_path, self.setup_path]): |
2171 | log.warn("Link points to %s: uninstall aborted", contents) |
2172 | return |
2173 | |
2174 | === modified file 'setuptools/command/easy_install.py' |
2175 | --- setuptools/command/easy_install.py 2012-09-05 09:13:56 +0000 |
2176 | +++ setuptools/command/easy_install.py 2013-01-16 02:27:22 +0000 |
2177 | @@ -510,7 +510,7 @@ |
2178 | self.cant_write_to_target() |
2179 | else: |
2180 | try: |
2181 | - f.write("import os;open(%r,'w').write('OK')\n" % (ok_file,)) |
2182 | + f.write("import os; f = open(%r, 'w'); f.write('OK'); f.close()\n" % (ok_file,)) |
2183 | f.close(); f=None |
2184 | executable = sys.executable |
2185 | if os.name=='nt': |
2186 | @@ -1570,7 +1570,10 @@ |
2187 | if name.endswith('-nspkg.pth'): |
2188 | continue |
2189 | if parts[0].upper() in ('PURELIB','PLATLIB'): |
2190 | - for pth in yield_lines(z.read(name)): |
2191 | + contents = z.read(name) |
2192 | + if sys.version_info >= (3,): |
2193 | + contents = contents.decode() |
2194 | + for pth in yield_lines(contents): |
2195 | pth = pth.strip().replace('\\','/') |
2196 | if not pth.startswith('import'): |
2197 | prefixes.append((('%s/%s/' % (parts[0],pth)), '')) |
2198 | @@ -1833,6 +1836,11 @@ |
2199 | |
2200 | def fix_jython_executable(executable, options): |
2201 | if sys.platform.startswith('java') and is_sh(executable): |
2202 | + # Workaround for Jython is not needed on Linux systems. |
2203 | + import java |
2204 | + if java.lang.System.getProperty("os.name") == "Linux": |
2205 | + return executable |
2206 | + |
2207 | # Workaround Jython's sys.executable being a .sh (an invalid |
2208 | # shebang line interpreter) |
2209 | if options: |
2210 | |
2211 | === modified file 'setuptools/command/egg_info.py' |
2212 | --- setuptools/command/egg_info.py 2012-10-21 19:41:01 +0000 |
2213 | +++ setuptools/command/egg_info.py 2013-01-16 02:27:22 +0000 |
2214 | @@ -281,9 +281,21 @@ |
2215 | if item.endswith('\r'): # Fix older sdists built on Windows |
2216 | item = item[:-1] |
2217 | path = convert_path(item) |
2218 | - if os.path.exists(path): |
2219 | - self.files.append(path) |
2220 | |
2221 | + if sys.version_info >= (3,): |
2222 | + try: |
2223 | + if os.path.exists(path) or os.path.exists(path.encode('utf-8')): |
2224 | + self.files.append(path) |
2225 | + except UnicodeEncodeError: |
2226 | + # Accept UTF-8 filenames even if LANG=C |
2227 | + if os.path.exists(path.encode('utf-8')): |
2228 | + self.files.append(path) |
2229 | + else: |
2230 | + log.warn("'%s' not %s encodable -- skipping", path, |
2231 | + sys.getfilesystemencoding()) |
2232 | + else: |
2233 | + if os.path.exists(path): |
2234 | + self.files.append(path) |
2235 | |
2236 | |
2237 | |
2238 | @@ -323,6 +335,18 @@ |
2239 | by 'add_defaults()' and 'read_template()') to the manifest file |
2240 | named by 'self.manifest'. |
2241 | """ |
2242 | + # The manifest must be UTF-8 encodable. See #303. |
2243 | + if sys.version_info >= (3,): |
2244 | + files = [] |
2245 | + for file in self.filelist.files: |
2246 | + try: |
2247 | + file.encode("utf-8") |
2248 | + except UnicodeEncodeError: |
2249 | + log.warn("'%s' not UTF-8 encodable -- skipping" % file) |
2250 | + else: |
2251 | + files.append(file) |
2252 | + self.filelist.files = files |
2253 | + |
2254 | files = self.filelist.files |
2255 | if os.sep!='/': |
2256 | files = [f.replace(os.sep,'/') for f in files] |
2257 | @@ -360,7 +384,7 @@ |
2258 | """ |
2259 | contents = "\n".join(contents) |
2260 | if sys.version_info >= (3,): |
2261 | - contents = contents.encode("utf-8", "surrogateescape") |
2262 | + contents = contents.encode("utf-8") |
2263 | f = open(filename, "wb") # always write POSIX-style manifest |
2264 | f.write(contents) |
2265 | f.close() |
2266 | |
2267 | === modified file 'setuptools/command/sdist.py' |
2268 | --- setuptools/command/sdist.py 2012-10-21 19:41:01 +0000 |
2269 | +++ setuptools/command/sdist.py 2013-01-16 02:27:22 +0000 |
2270 | @@ -282,8 +282,13 @@ |
2271 | log.info("reading manifest file '%s'", self.manifest) |
2272 | manifest = open(self.manifest, 'rbU') |
2273 | for line in manifest: |
2274 | + # The manifest must contain UTF-8. See #303. |
2275 | if sys.version_info >= (3,): |
2276 | - line = line.decode('UTF-8', 'surrogateescape') |
2277 | + try: |
2278 | + line = line.decode('UTF-8') |
2279 | + except UnicodeDecodeError: |
2280 | + log.warn("%r not UTF-8 decodable -- skipping" % line) |
2281 | + continue |
2282 | # ignore comments and blank lines |
2283 | line = line.strip() |
2284 | if line.startswith('#') or not line: |
2285 | |
2286 | === modified file 'setuptools/command/upload.py' |
2287 | --- setuptools/command/upload.py 2012-08-29 11:43:26 +0000 |
2288 | +++ setuptools/command/upload.py 2013-01-16 02:27:22 +0000 |
2289 | @@ -109,8 +109,9 @@ |
2290 | data['comment'] = comment |
2291 | |
2292 | if self.sign: |
2293 | - data['gpg_signature'] = (os.path.basename(filename) + ".asc", |
2294 | - open(filename+".asc").read()) |
2295 | + asc_file = open(filename + ".asc") |
2296 | + data['gpg_signature'] = (os.path.basename(filename) + ".asc", asc_file.read()) |
2297 | + asc_file.close() |
2298 | |
2299 | # set up the authentication |
2300 | auth = "Basic " + base64.encodestring(self.username + ":" + self.password).strip() |
2301 | |
2302 | === modified file 'setuptools/command/upload_docs.py' |
2303 | --- setuptools/command/upload_docs.py 2012-10-21 19:41:01 +0000 |
2304 | +++ setuptools/command/upload_docs.py 2013-01-16 02:27:22 +0000 |
2305 | @@ -25,17 +25,12 @@ |
2306 | except ImportError: |
2307 | from setuptools.command.upload import upload |
2308 | |
2309 | -if sys.version_info >= (3,): |
2310 | - errors = 'surrogateescape' |
2311 | -else: |
2312 | - errors = 'strict' |
2313 | - |
2314 | |
2315 | # This is not just a replacement for byte literals |
2316 | # but works as a general purpose encoder |
2317 | def b(s, encoding='utf-8'): |
2318 | if isinstance(s, unicode): |
2319 | - return s.encode(encoding, errors) |
2320 | + return s.encode(encoding) |
2321 | return s |
2322 | |
2323 | |
2324 | @@ -110,7 +105,9 @@ |
2325 | shutil.rmtree(tmp_dir) |
2326 | |
2327 | def upload_file(self, filename): |
2328 | - content = open(filename, 'rb').read() |
2329 | + f = open(filename, 'rb') |
2330 | + content = f.read() |
2331 | + f.close() |
2332 | meta = self.distribution.metadata |
2333 | data = { |
2334 | ':action': 'doc_upload', |
2335 | |
2336 | === modified file 'setuptools/dist.py' |
2337 | --- setuptools/dist.py 2012-10-21 19:41:01 +0000 |
2338 | +++ setuptools/dist.py 2013-01-16 02:27:22 +0000 |
2339 | @@ -657,6 +657,11 @@ |
2340 | if not isinstance(sys.stdout, io.TextIOWrapper): |
2341 | return _Distribution.handle_display_options(self, option_order) |
2342 | |
2343 | + # Don't wrap stdout if utf-8 is already the encoding. Provides |
2344 | + # workaround for #334. |
2345 | + if sys.stdout.encoding.lower() in ('utf-8', 'utf8'): |
2346 | + return _Distribution.handle_display_options(self, option_order) |
2347 | + |
2348 | # Print metadata in UTF-8 no matter the platform |
2349 | encoding = sys.stdout.encoding |
2350 | errors = sys.stdout.errors |
2351 | |
2352 | === modified file 'setuptools/package_index.py' |
2353 | --- setuptools/package_index.py 2012-10-21 22:15:11 +0000 |
2354 | +++ setuptools/package_index.py 2013-01-16 02:27:22 +0000 |
2355 | @@ -657,6 +657,10 @@ |
2356 | # |
2357 | if scheme=='svn' or scheme.startswith('svn+'): |
2358 | return self._download_svn(url, filename) |
2359 | + elif scheme=='git' or scheme.startswith('git+'): |
2360 | + return self._download_git(url, filename) |
2361 | + elif scheme.startswith('hg+'): |
2362 | + return self._download_hg(url, filename) |
2363 | elif scheme=='file': |
2364 | return urllib.url2pathname(urlparse.urlparse(url)[2]) |
2365 | else: |
2366 | @@ -697,6 +701,55 @@ |
2367 | os.system("svn checkout -q %s %s" % (url, filename)) |
2368 | return filename |
2369 | |
2370 | + def _vcs_split_rev_from_url(self, url, pop_prefix=False): |
2371 | + scheme, netloc, path, query, frag = urlparse.urlsplit(url) |
2372 | + |
2373 | + scheme = scheme.split('+', 1)[-1] |
2374 | + |
2375 | + # Some fragment identification fails |
2376 | + path = path.split('#',1)[0] |
2377 | + |
2378 | + rev = None |
2379 | + if '@' in path: |
2380 | + path, rev = path.rsplit('@', 1) |
2381 | + |
2382 | + # Also, discard fragment |
2383 | + url = urlparse.urlunsplit((scheme, netloc, path, query, '')) |
2384 | + |
2385 | + return url, rev |
2386 | + |
2387 | + def _download_git(self, url, filename): |
2388 | + filename = filename.split('#',1)[0] |
2389 | + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) |
2390 | + |
2391 | + self.info("Doing git clone from %s to %s", url, filename) |
2392 | + os.system("git clone --quiet %s %s" % (url, filename)) |
2393 | + |
2394 | + if rev is not None: |
2395 | + self.info("Checking out %s", rev) |
2396 | + os.system("(cd %s && git checkout --quiet %s)" % ( |
2397 | + filename, |
2398 | + rev, |
2399 | + )) |
2400 | + |
2401 | + return filename |
2402 | + |
2403 | + def _download_hg(self, url, filename): |
2404 | + filename = filename.split('#',1)[0] |
2405 | + url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True) |
2406 | + |
2407 | + self.info("Doing hg clone from %s to %s", url, filename) |
2408 | + os.system("hg clone --quiet %s %s" % (url, filename)) |
2409 | + |
2410 | + if rev is not None: |
2411 | + self.info("Updating to %s", rev) |
2412 | + os.system("(cd %s && hg up -C -r %s >&-)" % ( |
2413 | + filename, |
2414 | + rev, |
2415 | + )) |
2416 | + |
2417 | + return filename |
2418 | + |
2419 | def debug(self, msg, *args): |
2420 | log.debug(msg, *args) |
2421 | |
2422 | @@ -781,9 +834,8 @@ |
2423 | |
2424 | # Double scheme does not raise on Mac OS X as revealed by a |
2425 | # failing test. We would expect "nonnumeric port". Refs #20. |
2426 | - if sys.platform == 'darwin': |
2427 | - if netloc.endswith(':'): |
2428 | - raise httplib.InvalidURL("nonnumeric port: ''") |
2429 | + if netloc.endswith(':'): |
2430 | + raise httplib.InvalidURL("nonnumeric port: ''") |
2431 | |
2432 | if scheme in ('http', 'https'): |
2433 | auth, host = urllib2.splituser(netloc) |
2434 | |
2435 | === modified file 'setuptools/sandbox.py' |
2436 | --- setuptools/sandbox.py 2012-10-21 19:41:01 +0000 |
2437 | +++ setuptools/sandbox.py 2013-01-16 02:27:22 +0000 |
2438 | @@ -1,5 +1,8 @@ |
2439 | import os, sys, __builtin__, tempfile, operator, pkg_resources |
2440 | -_os = sys.modules[os.name] |
2441 | +if os.name == "java": |
2442 | + import org.python.modules.posix.PosixModule as _os |
2443 | +else: |
2444 | + _os = sys.modules[os.name] |
2445 | try: |
2446 | _file = file |
2447 | except NameError: |
2448 | |
2449 | === modified file 'setuptools/tests/doctest.py' |
2450 | --- setuptools/tests/doctest.py 2009-10-20 00:12:26 +0000 |
2451 | +++ setuptools/tests/doctest.py 2013-01-16 02:27:22 +0000 |
2452 | @@ -1968,7 +1968,9 @@ |
2453 | runner = DocTestRunner(verbose=verbose, optionflags=optionflags) |
2454 | |
2455 | # Read the file, convert it to a test, and run it. |
2456 | - s = open(filename).read() |
2457 | + f = open(filename) |
2458 | + s = f.read() |
2459 | + f.close() |
2460 | test = parser.get_doctest(s, globs, name, filename, 0) |
2461 | runner.run(test) |
2462 | |
2463 | @@ -2353,7 +2355,9 @@ |
2464 | |
2465 | # Find the file and read it. |
2466 | name = os.path.basename(path) |
2467 | - doc = open(path).read() |
2468 | + f = open(path) |
2469 | + doc = f.read() |
2470 | + f.close() |
2471 | |
2472 | # Convert it to a test, and wrap it in a DocFileCase. |
2473 | test = parser.get_doctest(doc, globs, name, path, 0) |
2474 | |
2475 | === modified file 'setuptools/tests/test_develop.py' |
2476 | --- setuptools/tests/test_develop.py 2012-10-21 19:41:01 +0000 |
2477 | +++ setuptools/tests/test_develop.py 2013-01-16 02:27:22 +0000 |
2478 | @@ -89,8 +89,12 @@ |
2479 | self.assertEqual(content, ['easy-install.pth', 'foo.egg-link']) |
2480 | |
2481 | # Check that we are using the right code. |
2482 | - path = open(os.path.join(site.USER_SITE, 'foo.egg-link'), 'rt').read().split()[0].strip() |
2483 | - init = open(os.path.join(path, 'foo', '__init__.py'), 'rt').read().strip() |
2484 | + egg_link_file = open(os.path.join(site.USER_SITE, 'foo.egg-link'), 'rt') |
2485 | + path = egg_link_file.read().split()[0].strip() |
2486 | + egg_link_file.close() |
2487 | + init_file = open(os.path.join(path, 'foo', '__init__.py'), 'rt') |
2488 | + init = init_file.read().strip() |
2489 | + init_file.close() |
2490 | if sys.version < "3": |
2491 | self.assertEqual(init, 'print "foo"') |
2492 | else: |
2493 | |
2494 | === modified file 'setuptools/tests/test_dist_info.py' |
2495 | --- setuptools/tests/test_dist_info.py 2012-10-21 19:41:01 +0000 |
2496 | +++ setuptools/tests/test_dist_info.py 2013-01-16 02:27:22 +0000 |
2497 | @@ -50,7 +50,8 @@ |
2498 | versioned = os.path.join(self.tmpdir, |
2499 | 'VersionedDistribution-2.718.dist-info') |
2500 | os.mkdir(versioned) |
2501 | - open(os.path.join(versioned, 'METADATA'), 'w+').write(DALS( |
2502 | + metadata_file = open(os.path.join(versioned, 'METADATA'), 'w+') |
2503 | + metadata_file.write(DALS( |
2504 | """ |
2505 | Metadata-Version: 1.2 |
2506 | Name: VersionedDistribution |
2507 | @@ -58,11 +59,13 @@ |
2508 | Provides-Extra: baz |
2509 | Requires-Dist: quux (>=1.1); extra == 'baz' |
2510 | """)) |
2511 | + metadata_file.close() |
2512 | |
2513 | unversioned = os.path.join(self.tmpdir, |
2514 | 'UnversionedDistribution.dist-info') |
2515 | os.mkdir(unversioned) |
2516 | - open(os.path.join(unversioned, 'METADATA'), 'w+').write(DALS( |
2517 | + metadata_file = open(os.path.join(unversioned, 'METADATA'), 'w+') |
2518 | + metadata_file.write(DALS( |
2519 | """ |
2520 | Metadata-Version: 1.2 |
2521 | Name: UnversionedDistribution |
2522 | @@ -71,6 +74,7 @@ |
2523 | Provides-Extra: baz |
2524 | Requires-Dist: quux (>=1.1); extra == 'baz' |
2525 | """)) |
2526 | + metadata_file.close() |
2527 | |
2528 | def tearDown(self): |
2529 | shutil.rmtree(self.tmpdir) |
2530 | |
2531 | === modified file 'setuptools/tests/test_easy_install.py' |
2532 | --- setuptools/tests/test_easy_install.py 2012-10-21 19:41:01 +0000 |
2533 | +++ setuptools/tests/test_easy_install.py 2013-01-16 02:27:22 +0000 |
2534 | @@ -13,7 +13,7 @@ |
2535 | import distutils.core |
2536 | |
2537 | from setuptools.sandbox import run_setup, SandboxViolation |
2538 | -from setuptools.command.easy_install import easy_install, get_script_args, main |
2539 | +from setuptools.command.easy_install import easy_install, fix_jython_executable, get_script_args, main |
2540 | from setuptools.command.easy_install import PthDistributions |
2541 | from setuptools.command import easy_install as easy_install_pkg |
2542 | from setuptools.dist import Distribution |
2543 | @@ -51,7 +51,7 @@ |
2544 | sys.exit( |
2545 | load_entry_point('spec', 'console_scripts', 'name')() |
2546 | ) |
2547 | -""" % sys.executable |
2548 | +""" % fix_jython_executable(sys.executable, "") |
2549 | |
2550 | SETUP_PY = """\ |
2551 | from setuptools import setup |
2552 | @@ -234,7 +234,7 @@ |
2553 | f = open(egg_file, 'w') |
2554 | try: |
2555 | f.write('Name: foo\n') |
2556 | - except: |
2557 | + finally: |
2558 | f.close() |
2559 | |
2560 | sys.path.append(target) |
2561 | @@ -307,12 +307,11 @@ |
2562 | sys.stdout = StringIO.StringIO() |
2563 | sys.stderr = StringIO.StringIO() |
2564 | try: |
2565 | - try: |
2566 | - reset_setup_stop_context( |
2567 | - lambda: run_setup(test_setup_py, ['install']) |
2568 | - ) |
2569 | - except SandboxViolation: |
2570 | - self.fail('Installation caused SandboxViolation') |
2571 | + reset_setup_stop_context( |
2572 | + lambda: run_setup(test_setup_py, ['install']) |
2573 | + ) |
2574 | + except SandboxViolation: |
2575 | + self.fail('Installation caused SandboxViolation') |
2576 | finally: |
2577 | sys.stdout = old_stdout |
2578 | sys.stderr = old_stderr |
2579 | |
2580 | === modified file 'setuptools/tests/test_markerlib.py' |
2581 | --- setuptools/tests/test_markerlib.py 2012-10-21 19:41:01 +0000 |
2582 | +++ setuptools/tests/test_markerlib.py 2013-01-16 02:27:22 +0000 |
2583 | @@ -16,15 +16,15 @@ |
2584 | |
2585 | os_name = os.name |
2586 | |
2587 | - self.assert_(interpret("")) |
2588 | + self.assertTrue(interpret("")) |
2589 | |
2590 | - self.assert_(interpret("os.name != 'buuuu'")) |
2591 | - self.assert_(interpret("python_version > '1.0'")) |
2592 | - self.assert_(interpret("python_version < '5.0'")) |
2593 | - self.assert_(interpret("python_version <= '5.0'")) |
2594 | - self.assert_(interpret("python_version >= '1.0'")) |
2595 | - self.assert_(interpret("'%s' in os.name" % os_name)) |
2596 | - self.assert_(interpret("'buuuu' not in os.name")) |
2597 | + self.assertTrue(interpret("os.name != 'buuuu'")) |
2598 | + self.assertTrue(interpret("python_version > '1.0'")) |
2599 | + self.assertTrue(interpret("python_version < '5.0'")) |
2600 | + self.assertTrue(interpret("python_version <= '5.0'")) |
2601 | + self.assertTrue(interpret("python_version >= '1.0'")) |
2602 | + self.assertTrue(interpret("'%s' in os.name" % os_name)) |
2603 | + self.assertTrue(interpret("'buuuu' not in os.name")) |
2604 | |
2605 | self.assertFalse(interpret("os.name == 'buuuu'")) |
2606 | self.assertFalse(interpret("python_version < '1.0'")) |
2607 | @@ -36,7 +36,7 @@ |
2608 | |
2609 | environment = default_environment() |
2610 | environment['extra'] = 'test' |
2611 | - self.assert_(interpret("extra == 'test'", environment)) |
2612 | + self.assertTrue(interpret("extra == 'test'", environment)) |
2613 | self.assertFalse(interpret("extra == 'doc'", environment)) |
2614 | |
2615 | def raises_nameError(): |
2616 | |
2617 | === modified file 'setuptools/tests/test_resources.py' |
2618 | --- setuptools/tests/test_resources.py 2012-10-21 22:15:11 +0000 |
2619 | +++ setuptools/tests/test_resources.py 2013-01-16 02:27:22 +0000 |
2620 | @@ -561,6 +561,15 @@ |
2621 | if (sys.version_info >= (3,) and os.environ.get("LC_CTYPE") |
2622 | in (None, "C", "POSIX")): |
2623 | return |
2624 | + |
2625 | + class java: |
2626 | + class lang: |
2627 | + class System: |
2628 | + @staticmethod |
2629 | + def getProperty(property): |
2630 | + return "" |
2631 | + sys.modules["java"] = java |
2632 | + |
2633 | platform = sys.platform |
2634 | sys.platform = 'java1.5.0_13' |
2635 | stdout = sys.stdout |
2636 | @@ -584,6 +593,7 @@ |
2637 | '#!%s -x\n' % self.non_ascii_exe) |
2638 | self.assertTrue('Unable to adapt shebang line' in sys.stdout.getvalue()) |
2639 | finally: |
2640 | + del sys.modules["java"] |
2641 | sys.platform = platform |
2642 | sys.stdout = stdout |
2643 | |
2644 | |
2645 | === modified file 'setuptools/tests/test_sdist.py' |
2646 | --- setuptools/tests/test_sdist.py 2012-10-21 19:41:01 +0000 |
2647 | +++ setuptools/tests/test_sdist.py 2013-01-16 02:27:22 +0000 |
2648 | @@ -9,7 +9,6 @@ |
2649 | import unittest |
2650 | import urllib |
2651 | import unicodedata |
2652 | -import posixpath |
2653 | from StringIO import StringIO |
2654 | |
2655 | |
2656 | @@ -49,14 +48,22 @@ |
2657 | sys.stdout, sys.stderr = old_stdout, old_stderr |
2658 | |
2659 | |
2660 | -# Fake byte literals to shut up Python <= 2.5 |
2661 | +# Fake byte literals for Python <= 2.5 |
2662 | def b(s, encoding='utf-8'): |
2663 | if sys.version_info >= (3,): |
2664 | return s.encode(encoding) |
2665 | return s |
2666 | |
2667 | |
2668 | -# HFS Plus returns decomposed UTF-8 |
2669 | +# Convert to POSIX path |
2670 | +def posix(path): |
2671 | + if sys.version_info >= (3,) and not isinstance(path, unicode): |
2672 | + return path.replace(os.sep.encode('ascii'), b('/')) |
2673 | + else: |
2674 | + return path.replace(os.sep, '/') |
2675 | + |
2676 | + |
2677 | +# HFS Plus uses decomposed UTF-8 |
2678 | def decompose(path): |
2679 | if isinstance(path, unicode): |
2680 | return unicodedata.normalize('NFD', path) |
2681 | @@ -69,20 +76,6 @@ |
2682 | return path |
2683 | |
2684 | |
2685 | -# HFS Plus quotes unknown bytes like so: %F6 |
2686 | -def hfs_quote(path): |
2687 | - if isinstance(path, unicode): |
2688 | - raise TypeError('bytes are required') |
2689 | - try: |
2690 | - u = path.decode('utf-8') |
2691 | - except UnicodeDecodeError: |
2692 | - path = urllib.quote(path) # Not UTF-8 |
2693 | - else: |
2694 | - if sys.version_info >= (3,): |
2695 | - path = u |
2696 | - return path |
2697 | - |
2698 | - |
2699 | class TestSdistTest(unittest.TestCase): |
2700 | |
2701 | def setUp(self): |
2702 | @@ -138,7 +131,7 @@ |
2703 | os.mkdir('sdist_test.egg-info') |
2704 | |
2705 | # UTF-8 filename |
2706 | - filename = posixpath.join('sdist_test', 'smörbröd.py') |
2707 | + filename = os.path.join('sdist_test', 'smörbröd.py') |
2708 | |
2709 | # Add UTF-8 filename and write manifest |
2710 | quiet() |
2711 | @@ -155,46 +148,94 @@ |
2712 | |
2713 | # The manifest should be UTF-8 encoded |
2714 | try: |
2715 | - u = contents.decode('UTF-8') |
2716 | + u_contents = contents.decode('UTF-8') |
2717 | except UnicodeDecodeError, e: |
2718 | self.fail(e) |
2719 | |
2720 | # The manifest should contain the UTF-8 filename |
2721 | if sys.version_info >= (3,): |
2722 | - self.assertTrue(filename in u) |
2723 | + self.assertTrue(posix(filename) in u_contents) |
2724 | else: |
2725 | - self.assertTrue(filename in contents) |
2726 | - |
2727 | - def test_manifest_is_written_with_surrogateescape_error_handler(self): |
2728 | - # Test for #303. |
2729 | - dist = Distribution(SETUP_ATTRS) |
2730 | - dist.script_name = 'setup.py' |
2731 | - mm = manifest_maker(dist) |
2732 | - mm.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') |
2733 | - os.mkdir('sdist_test.egg-info') |
2734 | - |
2735 | - # Latin-1 filename |
2736 | - filename = posixpath.join(b('sdist_test'), LATIN1_FILENAME) |
2737 | - |
2738 | - # Add filename with surrogates and write manifest |
2739 | - quiet() |
2740 | - try: |
2741 | - mm.run() |
2742 | - if sys.version_info >= (3,): |
2743 | - u = filename.decode('utf-8', 'surrogateescape') |
2744 | - mm.filelist.files.append(u) |
2745 | - else: |
2746 | - mm.filelist.files.append(filename) |
2747 | - mm.write_manifest() |
2748 | - finally: |
2749 | - unquiet() |
2750 | - |
2751 | - manifest = open(mm.manifest, 'rbU') |
2752 | - contents = manifest.read() |
2753 | - manifest.close() |
2754 | - |
2755 | - # The manifest should contain the Latin-1 filename |
2756 | - self.assertTrue(filename in contents) |
2757 | + self.assertTrue(posix(filename) in contents) |
2758 | + |
2759 | + # Python 3 only |
2760 | + if sys.version_info >= (3,): |
2761 | + |
2762 | + def test_write_manifest_allows_utf8_filenames(self): |
2763 | + # Test for #303. |
2764 | + dist = Distribution(SETUP_ATTRS) |
2765 | + dist.script_name = 'setup.py' |
2766 | + mm = manifest_maker(dist) |
2767 | + mm.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') |
2768 | + os.mkdir('sdist_test.egg-info') |
2769 | + |
2770 | + # UTF-8 filename |
2771 | + filename = os.path.join(b('sdist_test'), b('smörbröd.py')) |
2772 | + |
2773 | + # Add filename and write manifest |
2774 | + quiet() |
2775 | + try: |
2776 | + mm.run() |
2777 | + u_filename = filename.decode('utf-8') |
2778 | + mm.filelist.files.append(u_filename) |
2779 | + # Re-write manifest |
2780 | + mm.write_manifest() |
2781 | + finally: |
2782 | + unquiet() |
2783 | + |
2784 | + manifest = open(mm.manifest, 'rbU') |
2785 | + contents = manifest.read() |
2786 | + manifest.close() |
2787 | + |
2788 | + # The manifest should be UTF-8 encoded |
2789 | + try: |
2790 | + contents.decode('UTF-8') |
2791 | + except UnicodeDecodeError, e: |
2792 | + self.fail(e) |
2793 | + |
2794 | + # The manifest should contain the UTF-8 filename |
2795 | + self.assertTrue(posix(filename) in contents) |
2796 | + |
2797 | + # The filelist should have been updated as well |
2798 | + self.assertTrue(u_filename in mm.filelist.files) |
2799 | + |
2800 | + def test_write_manifest_skips_non_utf8_filenames(self): |
2801 | + # Test for #303. |
2802 | + dist = Distribution(SETUP_ATTRS) |
2803 | + dist.script_name = 'setup.py' |
2804 | + mm = manifest_maker(dist) |
2805 | + mm.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') |
2806 | + os.mkdir('sdist_test.egg-info') |
2807 | + |
2808 | + # Latin-1 filename |
2809 | + filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) |
2810 | + |
2811 | + # Add filename with surrogates and write manifest |
2812 | + quiet() |
2813 | + try: |
2814 | + mm.run() |
2815 | + u_filename = filename.decode('utf-8', 'surrogateescape') |
2816 | + mm.filelist.files.append(u_filename) |
2817 | + # Re-write manifest |
2818 | + mm.write_manifest() |
2819 | + finally: |
2820 | + unquiet() |
2821 | + |
2822 | + manifest = open(mm.manifest, 'rbU') |
2823 | + contents = manifest.read() |
2824 | + manifest.close() |
2825 | + |
2826 | + # The manifest should be UTF-8 encoded |
2827 | + try: |
2828 | + contents.decode('UTF-8') |
2829 | + except UnicodeDecodeError, e: |
2830 | + self.fail(e) |
2831 | + |
2832 | + # The Latin-1 filename should have been skipped |
2833 | + self.assertFalse(posix(filename) in contents) |
2834 | + |
2835 | + # The filelist should have been updated as well |
2836 | + self.assertFalse(u_filename in mm.filelist.files) |
2837 | |
2838 | def test_manifest_is_read_with_utf8_encoding(self): |
2839 | # Test for #303. |
2840 | @@ -203,52 +244,77 @@ |
2841 | cmd = sdist(dist) |
2842 | cmd.ensure_finalized() |
2843 | |
2844 | - # UTF-8 filename |
2845 | - filename = os.path.join('sdist_test', 'smörbröd.py') |
2846 | + # Create manifest |
2847 | + quiet() |
2848 | + try: |
2849 | + cmd.run() |
2850 | + finally: |
2851 | + unquiet() |
2852 | + |
2853 | + # Add UTF-8 filename to manifest |
2854 | + filename = os.path.join(b('sdist_test'), b('smörbröd.py')) |
2855 | + cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') |
2856 | + manifest = open(cmd.manifest, 'ab') |
2857 | + manifest.write(b('\n')+filename) |
2858 | + manifest.close() |
2859 | + |
2860 | + # The file must exist to be included in the filelist |
2861 | open(filename, 'w').close() |
2862 | |
2863 | + # Re-read manifest |
2864 | + cmd.filelist.files = [] |
2865 | quiet() |
2866 | try: |
2867 | - cmd.run() |
2868 | + cmd.read_manifest() |
2869 | finally: |
2870 | unquiet() |
2871 | |
2872 | # The filelist should contain the UTF-8 filename |
2873 | - if sys.platform == 'darwin': |
2874 | - filename = decompose(filename) |
2875 | + if sys.version_info >= (3,): |
2876 | + filename = filename.decode('utf-8') |
2877 | self.assertTrue(filename in cmd.filelist.files) |
2878 | |
2879 | - def test_manifest_is_read_with_surrogateescape_error_handler(self): |
2880 | - # Test for #303. |
2881 | - |
2882 | - # This is hard to test on HFS Plus because it quotes unknown |
2883 | - # bytes (see previous test). Furthermore, egg_info.FileList |
2884 | - # only appends filenames that os.path.exist. |
2885 | - |
2886 | - # We therefore write the manifest file by hand and check whether |
2887 | - # read_manifest produces a UnicodeDecodeError. |
2888 | - dist = Distribution(SETUP_ATTRS) |
2889 | - dist.script_name = 'setup.py' |
2890 | - cmd = sdist(dist) |
2891 | - cmd.ensure_finalized() |
2892 | - |
2893 | - filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) |
2894 | - |
2895 | - quiet() |
2896 | - try: |
2897 | - cmd.run() |
2898 | + # Python 3 only |
2899 | + if sys.version_info >= (3,): |
2900 | + |
2901 | + def test_read_manifest_skips_non_utf8_filenames(self): |
2902 | + # Test for #303. |
2903 | + dist = Distribution(SETUP_ATTRS) |
2904 | + dist.script_name = 'setup.py' |
2905 | + cmd = sdist(dist) |
2906 | + cmd.ensure_finalized() |
2907 | + |
2908 | + # Create manifest |
2909 | + quiet() |
2910 | + try: |
2911 | + cmd.run() |
2912 | + finally: |
2913 | + unquiet() |
2914 | + |
2915 | # Add Latin-1 filename to manifest |
2916 | + filename = os.path.join(b('sdist_test'), LATIN1_FILENAME) |
2917 | cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') |
2918 | manifest = open(cmd.manifest, 'ab') |
2919 | - manifest.write(filename+b('\n')) |
2920 | + manifest.write(b('\n')+filename) |
2921 | manifest.close() |
2922 | + |
2923 | + # The file must exist to be included in the filelist |
2924 | + open(filename, 'w').close() |
2925 | + |
2926 | # Re-read manifest |
2927 | + cmd.filelist.files = [] |
2928 | + quiet() |
2929 | try: |
2930 | - cmd.read_manifest() |
2931 | - except UnicodeDecodeError, e: |
2932 | - self.fail(e) |
2933 | - finally: |
2934 | - unquiet() |
2935 | + try: |
2936 | + cmd.read_manifest() |
2937 | + except UnicodeDecodeError, e: |
2938 | + self.fail(e) |
2939 | + finally: |
2940 | + unquiet() |
2941 | + |
2942 | + # The Latin-1 filename should have been skipped |
2943 | + filename = filename.decode('latin-1') |
2944 | + self.assertFalse(filename in cmd.filelist.files) |
2945 | |
2946 | def test_sdist_with_utf8_encoded_filename(self): |
2947 | # Test for #303. |
2948 | @@ -267,13 +333,19 @@ |
2949 | finally: |
2950 | unquiet() |
2951 | |
2952 | - # The filelist should contain the UTF-8 filename |
2953 | - # (in one representation or other) |
2954 | - if sys.version_info >= (3,): |
2955 | - filename = filename.decode(sys.getfilesystemencoding(), 'surrogateescape') |
2956 | if sys.platform == 'darwin': |
2957 | filename = decompose(filename) |
2958 | - self.assertTrue(filename in cmd.filelist.files) |
2959 | + |
2960 | + if sys.version_info >= (3,): |
2961 | + if sys.platform == 'win32': |
2962 | + # Python 3 mangles the UTF-8 filename |
2963 | + filename = filename.decode('cp1252') |
2964 | + self.assertTrue(filename in cmd.filelist.files) |
2965 | + else: |
2966 | + filename = filename.decode('utf-8') |
2967 | + self.assertTrue(filename in cmd.filelist.files) |
2968 | + else: |
2969 | + self.assertTrue(filename in cmd.filelist.files) |
2970 | |
2971 | def test_sdist_with_latin1_encoded_filename(self): |
2972 | # Test for #303. |
2973 | @@ -292,32 +364,18 @@ |
2974 | finally: |
2975 | unquiet() |
2976 | |
2977 | - # The filelist should contain the Latin-1 filename |
2978 | - # (in one representation or other) |
2979 | - if sys.platform == 'darwin': |
2980 | - filename = hfs_quote(filename) |
2981 | - elif sys.version_info >= (3,): |
2982 | - filename = filename.decode(sys.getfilesystemencoding(), 'surrogateescape') |
2983 | - self.assertTrue(filename in cmd.filelist.files) |
2984 | - |
2985 | - def test_decompose(self): |
2986 | - self.assertNotEqual('smörbröd.py', decompose('smörbröd.py')) |
2987 | - |
2988 | - if sys.version_info >= (3,): |
2989 | - self.assertEqual(len('smörbröd.py'), 11) |
2990 | - self.assertEqual(len(decompose('smörbröd.py')), 13) |
2991 | - else: |
2992 | - self.assertEqual(len('smörbröd.py'), 13) |
2993 | - self.assertEqual(len(decompose('smörbröd.py')), 15) |
2994 | - |
2995 | - def test_hfs_quote(self): |
2996 | - self.assertEqual(hfs_quote(LATIN1_FILENAME), 'sm%F6rbr%F6d.py') |
2997 | - |
2998 | - # Bytes are required |
2999 | - if sys.version_info >= (3,): |
3000 | - self.assertRaises(TypeError, hfs_quote, 'smörbröd.py') |
3001 | - else: |
3002 | - self.assertRaises(TypeError, hfs_quote, 'smörbröd.py'.decode('utf-8')) |
3003 | + if sys.version_info >= (3,): |
3004 | + filename = filename.decode('latin-1') |
3005 | + if sys.platform == 'win32': |
3006 | + # Latin-1 is similar to Windows-1252 |
3007 | + self.assertTrue(filename in cmd.filelist.files) |
3008 | + else: |
3009 | + # The Latin-1 filename should have been skipped |
3010 | + self.assertFalse(filename in cmd.filelist.files) |
3011 | + else: |
3012 | + # No conversion takes place under Python 2 and the file |
3013 | + # is included. We shall keep it that way for BBB. |
3014 | + self.assertTrue(filename in cmd.filelist.files) |
3015 | |
3016 | |
3017 | def test_suite(): |
3018 | |
3019 | === modified file 'setuptools/tests/win_script_wrapper.txt' |
3020 | --- setuptools/tests/win_script_wrapper.txt 2009-10-24 13:13:23 +0000 |
3021 | +++ setuptools/tests/win_script_wrapper.txt 2013-01-16 02:27:22 +0000 |
3022 | @@ -16,7 +16,8 @@ |
3023 | >>> import os, sys, tempfile |
3024 | >>> from setuptools.command.easy_install import nt_quote_arg |
3025 | >>> sample_directory = tempfile.mkdtemp() |
3026 | - >>> open(os.path.join(sample_directory, 'foo-script.py'), 'w').write( |
3027 | + >>> f = open(os.path.join(sample_directory, 'foo-script.py'), 'w') |
3028 | + >>> f.write( |
3029 | ... """#!%(python_exe)s |
3030 | ... import sys |
3031 | ... input = repr(sys.stdin.read()) |
3032 | @@ -26,6 +27,7 @@ |
3033 | ... if __debug__: |
3034 | ... print 'non-optimized' |
3035 | ... """ % dict(python_exe=nt_quote_arg(sys.executable))) |
3036 | + >>> f.close() |
3037 | |
3038 | Note that the script starts with a Unix-style '#!' line saying which |
3039 | Python executable to run. The wrapper will use this to find the |
3040 | @@ -34,9 +36,11 @@ |
3041 | We'll also copy cli.exe to the sample-directory with the name foo.exe: |
3042 | |
3043 | >>> import pkg_resources |
3044 | - >>> open(os.path.join(sample_directory, 'foo.exe'), 'wb').write( |
3045 | + >>> f = open(os.path.join(sample_directory, 'foo.exe'), 'wb') |
3046 | + >>> f.write( |
3047 | ... pkg_resources.resource_string('setuptools', 'cli.exe') |
3048 | ... ) |
3049 | + >>> f.close() |
3050 | |
3051 | When the copy of cli.exe, foo.exe in this example, runs, it examines |
3052 | the path name it was run with and computes a Python script path name |
3053 | @@ -77,7 +81,8 @@ |
3054 | options as usual. For example, to run in optimized mode and |
3055 | enter the interpreter after running the script, you could use -Oi: |
3056 | |
3057 | - >>> open(os.path.join(sample_directory, 'foo-script.py'), 'w').write( |
3058 | + >>> f = open(os.path.join(sample_directory, 'foo-script.py'), 'w') |
3059 | + >>> f.write( |
3060 | ... """#!%(python_exe)s -Oi |
3061 | ... import sys |
3062 | ... input = repr(sys.stdin.read()) |
3063 | @@ -88,6 +93,7 @@ |
3064 | ... print 'non-optimized' |
3065 | ... sys.ps1 = '---' |
3066 | ... """ % dict(python_exe=nt_quote_arg(sys.executable))) |
3067 | + >>> f.close() |
3068 | |
3069 | >>> input, output = os.popen4(nt_quote_arg(os.path.join(sample_directory, 'foo.exe'))) |
3070 | >>> input.close() |
3071 | @@ -105,18 +111,24 @@ |
3072 | >>> import os, sys, tempfile |
3073 | >>> from setuptools.command.easy_install import nt_quote_arg |
3074 | >>> sample_directory = tempfile.mkdtemp() |
3075 | - >>> open(os.path.join(sample_directory, 'bar-script.pyw'), 'w').write( |
3076 | + >>> f = open(os.path.join(sample_directory, 'bar-script.pyw'), 'w') |
3077 | + >>> f.write( |
3078 | ... """#!%(python_exe)s |
3079 | ... import sys |
3080 | - ... open(sys.argv[1], 'wb').write(repr(sys.argv[2])) |
3081 | + ... f = open(sys.argv[1], 'wb') |
3082 | + ... f.write(repr(sys.argv[2])) |
3083 | + ... f.close() |
3084 | ... """ % dict(python_exe=nt_quote_arg(sys.executable))) |
3085 | + >>> f.close() |
3086 | |
3087 | We'll also copy gui.exe to the sample-directory with the name bar.exe: |
3088 | |
3089 | >>> import pkg_resources |
3090 | - >>> open(os.path.join(sample_directory, 'bar.exe'), 'wb').write( |
3091 | + >>> f = open(os.path.join(sample_directory, 'bar.exe'), 'wb') |
3092 | + >>> f.write( |
3093 | ... pkg_resources.resource_string('setuptools', 'gui.exe') |
3094 | ... ) |
3095 | + >>> f.close() |
3096 | |
3097 | Finally, we'll run the script and check the result: |
3098 | |
3099 | @@ -126,8 +138,10 @@ |
3100 | >>> input.close() |
3101 | >>> print output.read() |
3102 | <BLANKLINE> |
3103 | - >>> print open(os.path.join(sample_directory, 'test_output.txt'), 'rb').read() |
3104 | + >>> f = open(os.path.join(sample_directory, 'test_output.txt'), 'rb') |
3105 | + >>> print f.read() |
3106 | 'Test Argument' |
3107 | + >>> f.close() |
3108 | |
3109 | |
3110 | We're done with the sample_directory: |
Thanks. Uploaded.