eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/upgrading_distribute.txt
changeset 307 c6bca38c1cbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eggs/zc.buildout-1.5.2-py2.6.egg/zc/buildout/upgrading_distribute.txt	Sat Jan 08 11:20:57 2011 +0530
@@ -0,0 +1,56 @@
+Installing setuptools/distribute
+--------------------------------
+
+Some initial test setup:
+
+    >>> import sys
+    >>> import zc.buildout
+    >>> dest = tmpdir('sample-install')
+
+Setuptools (0.6something) is packaged as an ``.egg``.  So when installing it,
+the egg is downloaded and used.  Distribute is packaged as a tarball, which
+makes an easy_install call necessary.  In older versions of buildout, the
+``_call_easy_install()`` method would call ``_get_dist()`` to get hold of the
+setuptools path for calling easy_install.  When an updated "distribute" was
+found, this would try an install again, leading to an infinite recursion.
+
+The solution is to just use the setuptools location found at import time, like
+happens with the buildout and setuptools location that is inserted in scripts'
+paths.
+
+We test this corner case by patching the ``_get_dist()`` call:
+
+    >>> def mock_get_dist(requirement, ws, always_unzip):
+    ...     raise RuntimeError("We should not get called")
+
+When installing setuptools itself, we expect the "Getting dist" message not to
+be printed.  We call ``_call_easy_install()`` directly and get an error
+because of a non-existing tarball, but that's the OK for this corner case
+test: we only want to test that ``_get_dist()`` isn't getting called:
+
+    >>> class MockDist(object):
+    ...     def __str__(self):
+    ...         return 'nonexisting.tgz'
+    ...     @property
+    ...     def project_name(self):
+    ...         # Testing corner case: there *is* actually
+    ...         # a newer setuptools package on pypi than we
+    ...         # are running with, so it really installs it
+    ...         # and compares project_name. We're past the
+    ...         # point that we're testing, so we just raise
+    ...         # the normally expected error.
+    ...         raise zc.buildout.UserError(
+    ...             "Couldn't install: nonexisting.tgz")
+    >>> dist = MockDist()
+
+    >>> installer = zc.buildout.easy_install.Installer(
+    ...     dest=dest,
+    ...     links=[link_server],
+    ...     index=link_server+'index/',
+    ...     executable=sys.executable,
+    ...     always_unzip=True)
+    >>> installer._get_dist = mock_get_dist
+    >>> installer._call_easy_install('setuptools', None, dest, dist)
+    Traceback (most recent call last):
+    ...
+    UserError: Couldn't install: nonexisting.tgz