Commits

tarek  committed ac7a437

simplifying the bootstrap process

  • Participants
  • Parent commits 07a5e2f
  • Branches 0.6-maintenance

Comments (0)

Files changed (1)

File distribute_setup.py

 if is_jython:
     import subprocess
 
+
 DEFAULT_VERSION = "0.6.1"
-DEFAULT_URL     = "http://pypi.python.org/packages/%s/d/distribute/" % sys.version[:3]
-
-def use_setuptools(
-    version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
-    download_delay=15
-):
-    """Automatically find/download setuptools and make it available on sys.path
-
-    `version` should be a valid setuptools version number that is available
-    as an egg for download under the `download_base` URL (which should end with
-    a '/').  `to_dir` is the directory where setuptools will be downloaded, if
-    it is not already available.  If `download_delay` is specified, it should
-    be the number of seconds that will be paused before initiating a download,
-    should one be required.  If an older version of setuptools is installed,
-    this routine will print a message to ``sys.stderr`` and raise SystemExit in
-    an attempt to abort the calling script.
-    """
-    was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules
-    def do_download():
-        egg = download_setuptools(version, download_base, to_dir, download_delay)
-        sys.path.insert(0, egg)
-        import setuptools; setuptools.bootstrap_install_from = egg
-    try:
-        import pkg_resources
-        if not hasattr(pkg_resources, '_distribute'):
-            raise ImportError
-    except ImportError:
-        return do_download()
-    try:
-        pkg_resources.require("distribute>="+version); return
-    except pkg_resources.VersionConflict, e:
-        if was_imported:
-            print >>sys.stderr, (
-            "The required version of distribute (>=%s) is not available, and\n"
-            "can't be installed while this script is running. Please install\n"
-            " a more recent version first, using 'easy_install -U distribute'."
-            "\n\n(Currently using %r)"
-            ) % (version, e.args[0])
-            sys.exit(2)
-        else:
-            del pkg_resources, sys.modules['pkg_resources']    # reload ok
-            return do_download()
-    except pkg_resources.DistributionNotFound:
-        return do_download()
+#DEFAULT_URL     = "http://pypi.python.org/packages/source/d/distribute/"
+DEFAULT_URL = "http://nightly.ziade.org/"
 
 def download_setuptools(
     version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
-    delay = 15
 ):
     """Download distribute from a specified location and return its filename
 
     `delay` is the number of seconds to pause before an actual download attempt.
     """
     import urllib2, shutil
-    egg_name = "distribute-%s-py%s.egg" % (version,sys.version[:3])
-    url = download_base + egg_name
-    saveto = os.path.join(to_dir, egg_name)
+    tgz_name = "distribute-%s.tar.gz" % version
+    url = download_base + tgz_name
+    saveto = os.path.join(to_dir, tgz_name)
     src = dst = None
     if not os.path.exists(saveto):  # Avoid repeated downloads
         try:
             from distutils import log
-            if delay:
-                log.warn("""
----------------------------------------------------------------------------
-This script requires distribute version %s to run (even to display
-help).  I will attempt to download it for you (from
-%s), but
-you may need to enable firewall access for this script first.
-I will start the download in %d seconds.
-
-(Note: if this machine does not have network access, please obtain the file
-
-   %s
-
-and place it in this directory before rerunning this script.)
----------------------------------------------------------------------------""",
-                    version, download_base, delay, url
-                ); from time import sleep; sleep(delay)
             log.warn("Downloading %s", url)
             src = urllib2.urlopen(url)
             # Read/write all in one block, so we don't create a corrupt file
             # if the download is interrupted.
             data = src.read()
-            dst = open(saveto,"wb"); dst.write(data)
+            dst = open(saveto, "wb")
+            dst.write(data)
         finally:
-            if src: src.close()
-            if dst: dst.close()
+            if src:
+                src.close()
+            if dst:
+                dst.close()
     return os.path.realpath(saveto)
 
 
     else:
         sys.exit(os.spawnv(os.P_WAIT, sys.executable, args))
 
-def _easy_install(argv, egg=None):
-    from setuptools import setup
-    from setuptools.dist import Distribution
-    import distutils.core
-    if egg is not None:
-        setup_args = list(argv) + [egg]
-    else:
-        setup_args = list(argv)
+import tempfile
+import tarfile
+
+def _install(tarball):
+    # extracting the tarball
+    tmpdir = tempfile.mkdtemp()
+    log.warn('Extracting in %s' % tmpdir)
+    old_wd = os.getcwd()
     try:
-        return setup(script_args = ['-q','easy_install',
-                                    '-v'] + setup_args,
-                    script_name = sys.argv[0] or 'easy_install',
-                    distclass=Distribution)
-    except DistutilsError:
-        return sys.exit(2)
+        os.chdir(tmpdir)
+        tar = tarfile.open(tarball)
+        tar.extractall()
+        tar.close()
+
+        # going in the directory
+        subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
+        os.chdir(subdir)
+        log.warn('Now working in %s' % subdir)
+
+        # installing distribute
+        os.system('%s setup.py install' % sys.executable)
+    finally:
+        os.chdir(old_wd)
 
 def main(argv, version=DEFAULT_VERSION):
     """Install or upgrade setuptools and EasyInstall"""
-    # let's deactivate any existing setuptools installation first
-    fake_setuptools()
-    try:
-        import setuptools
-        # we need to check if the installed setuptools
-        # is from Distribute or from setuptools
-        if not hasattr(setuptools, '_distribute'):
-            # now we are ready to install distribute
-            raise ImportError
-    except ImportError:
-        egg = None
-        try:
-            egg = download_setuptools(version, delay=0)
-            sys.path.insert(0, egg)
-            import setuptools
-            if not hasattr(setuptools, '_distribute'):
-                placeholder = os.path.split(os.path.dirname(setuptools.__file__))[0]
-                if not placeholder.endswith('.egg'):
-                    res = _remove_flat_installation(placeholder)
-                    if res:
-                        _relaunch()
-                print >> sys.stderr, (
-                "The patch didn't work, Setuptools is still active.\n"
-                "Possible reason: your have a system-wide setuptools installed "
-                "and you are in a virtualenv.\n"
-                "If you are inside a virtualenv, make sure you used the --no-site-packages option"
-                )
-                sys.exit(2)
-            dist = _easy_install(argv, egg)
-            after_install(dist)
-            return
-            #from setuptools.command import easy_install
-            #try:
-            #    return easy_install.main(list(argv)+['-v']+[egg])
-            #except DistutilsError:
-            #    return sys.exit(2)
-        finally:
-            if egg and os.path.exists(egg):
-                os.unlink(egg)
-    else:
-        if setuptools.__version__ == '0.0.1':
-            print >>sys.stderr, (
-            "You have an obsolete version of setuptools installed.  Please\n"
-            "remove it from your system entirely before rerunning this script."
-            )
-            sys.exit(2)
-
-    req = "distribute>="+version
-    import pkg_resources
-    try:
-        pkg_resources.require(req)
-    except pkg_resources.VersionConflict:
-        try:
-            _easy_install(argv, [download_setuptools(delay=0)])
-            #from setuptools.command.easy_install import main
-        except ImportError:
-            from easy_install import main
-            main(list(argv)+[download_setuptools(delay=0)])
-        sys.exit(0) # try to force an exit
-    else:
-        if argv:
-            _easy_install(argv)
-            #from setuptools.command.easy_install import main
-            #main(argv)
-        else:
-            print "distribute version",version,"or greater has been installed."
-            print '(Run "distribute_setup.py -U distribute" to reinstall or upgrade.)'
+    tarball = download_setuptools()
+    _install(tarball)
 
 if __name__ == '__main__':
     main(sys.argv[1:])