Merge lp:~logan/ubuntu/raring/distribute/0.6.34 into lp:ubuntu/raring/distribute

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
Reviewer Review Type Date Requested Status
Daniel Holbach (community) Approve
Ubuntu branches Pending
Review via email: mp+143433@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Daniel Holbach (dholbach) wrote :

Thanks. Uploaded.

review: Approve

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:

Subscribers

People subscribed via source and target branches

to all changes: