annotate distribute_setup.py @ 853:c2f6ada7858f

core (sqlite): automatic database update: - new Updater class check database consistency (by calculating a hash on the .schema), and updates base if necessary - database now has a version (1 for current, 0 will be for 0.3's database), for each change this version will be increased - creation statements and update statements are in the form of dict of dict with tuples. There is a help text at the top of the module to explain how it works - if we are on a development version, the updater try to update the database automaticaly (without deleting table or columns). The Updater.generateUpdateData method can be used to ease the creation of update data (i.e. the dictionary at the top, see the one for the key 1 for an example). - if there is an inconsistency, an exception is raised, and a message indicate the SQL statements that should fix the situation. - well... this is rather complicated, a KISS method would maybe have been better. The future will say if we need to simplify it :-/ - new DatabaseError exception
author Goffi <goffi@goffi.org>
date Sun, 23 Feb 2014 23:30:32 +0100
parents efd92a645220
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!python
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
2 """Bootstrap distribute installation
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
3
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
4 If you want to use setuptools in your package's setup.py, just include this
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
5 file in the same directory with it, and add this to the top of your setup.py::
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
6
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
7 from distribute_setup import use_setuptools
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
8 use_setuptools()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
9
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
10 If you want to require a specific version of setuptools, set a download
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
11 mirror, or use an alternate download directory, you can do so by supplying
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
12 the appropriate options to ``use_setuptools()``.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
13
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
14 This file can also be run as a script to install or upgrade setuptools.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
15 """
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
16 import os
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
17 import shutil
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
18 import sys
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
19 import time
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
20 import fnmatch
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
21 import tempfile
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
22 import tarfile
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
23 import optparse
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
24
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from distutils import log
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
26
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
27 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from site import USER_SITE
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
29 except ImportError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
30 USER_SITE = None
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
31
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
32 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
33 import subprocess
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
34
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
35 def _python_cmd(*args):
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
36 args = (sys.executable,) + args
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
37 return subprocess.call(args) == 0
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
38
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
39 except ImportError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
40 # will be used for python 2.3
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
41 def _python_cmd(*args):
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
42 args = (sys.executable,) + args
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
43 # quoting arguments if windows
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
44 if sys.platform == 'win32':
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
45 def quote(arg):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
46 if ' ' in arg:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
47 return '"%s"' % arg
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
48 return arg
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
49 args = [quote(arg) for arg in args]
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
50 return os.spawnl(os.P_WAIT, sys.executable, *args) == 0
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
51
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
52 DEFAULT_VERSION = "0.6.49"
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
53 DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/"
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
54 SETUPTOOLS_FAKED_VERSION = "0.6c11"
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
55
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
56 SETUPTOOLS_PKG_INFO = """\
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
57 Metadata-Version: 1.0
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
58 Name: setuptools
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
59 Version: %s
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
60 Summary: xxxx
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
61 Home-page: xxx
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
62 Author: xxx
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
63 Author-email: xxx
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
64 License: xxx
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
65 Description: xxx
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
66 """ % SETUPTOOLS_FAKED_VERSION
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
67
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
68
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
69 def _install(tarball, install_args=()):
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
70 # extracting the tarball
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
71 tmpdir = tempfile.mkdtemp()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
72 log.warn('Extracting in %s', tmpdir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
73 old_wd = os.getcwd()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
74 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
75 os.chdir(tmpdir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
76 tar = tarfile.open(tarball)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
77 _extractall(tar)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
78 tar.close()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
79
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
80 # going in the directory
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
81 subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
82 os.chdir(subdir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
83 log.warn('Now working in %s', subdir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
84
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
85 # installing
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
86 log.warn('Installing Distribute')
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
87 if not _python_cmd('setup.py', 'install', *install_args):
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
88 log.warn('Something went wrong during the installation.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
89 log.warn('See the error message above.')
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
90 # exitcode will be 2
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
91 return 2
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
92 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
93 os.chdir(old_wd)
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
94 shutil.rmtree(tmpdir)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
95
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
96
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
97 def _build_egg(egg, tarball, to_dir):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
98 # extracting the tarball
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
99 tmpdir = tempfile.mkdtemp()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
100 log.warn('Extracting in %s', tmpdir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
101 old_wd = os.getcwd()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
102 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
103 os.chdir(tmpdir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
104 tar = tarfile.open(tarball)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
105 _extractall(tar)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
106 tar.close()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
107
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
108 # going in the directory
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
109 subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
110 os.chdir(subdir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
111 log.warn('Now working in %s', subdir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
112
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
113 # building an egg
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
114 log.warn('Building a Distribute egg in %s', to_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
115 _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
116
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
117 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
118 os.chdir(old_wd)
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
119 shutil.rmtree(tmpdir)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
120 # returning the result
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
121 log.warn(egg)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
122 if not os.path.exists(egg):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
123 raise IOError('Could not build the egg.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
124
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
125
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
126 def _do_download(version, download_base, to_dir, download_delay):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
127 egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg'
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
128 % (version, sys.version_info[0], sys.version_info[1]))
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
129 if not os.path.exists(egg):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
130 tarball = download_setuptools(version, download_base,
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
131 to_dir, download_delay)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
132 _build_egg(egg, tarball, to_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
133 sys.path.insert(0, egg)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
134 import setuptools
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
135 setuptools.bootstrap_install_from = egg
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
136
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
137
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
138 def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
139 to_dir=os.curdir, download_delay=15, no_fake=True):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
140 # making sure we use the absolute path
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
141 to_dir = os.path.abspath(to_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
142 was_imported = 'pkg_resources' in sys.modules or \
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
143 'setuptools' in sys.modules
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
144 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
145 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
146 import pkg_resources
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
147
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
148 # Setuptools 0.7b and later is a suitable (and preferable)
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
149 # substitute for any Distribute version.
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
150 try:
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
151 pkg_resources.require("setuptools>=0.7b")
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
152 return
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
153 except (pkg_resources.DistributionNotFound,
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
154 pkg_resources.VersionConflict):
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
155 pass
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
156
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
157 if not hasattr(pkg_resources, '_distribute'):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
158 if not no_fake:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
159 _fake_setuptools()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
160 raise ImportError
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
161 except ImportError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
162 return _do_download(version, download_base, to_dir, download_delay)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
163 try:
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
164 pkg_resources.require("distribute>=" + version)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
165 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
166 except pkg_resources.VersionConflict:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
167 e = sys.exc_info()[1]
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
168 if was_imported:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
169 sys.stderr.write(
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
170 "The required version of distribute (>=%s) is not available,\n"
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
171 "and can't be installed while this script is running. Please\n"
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
172 "install a more recent version first, using\n"
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
173 "'easy_install -U distribute'."
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
174 "\n\n(Currently using %r)\n" % (version, e.args[0]))
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
175 sys.exit(2)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
176 else:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
177 del pkg_resources, sys.modules['pkg_resources'] # reload ok
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
178 return _do_download(version, download_base, to_dir,
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
179 download_delay)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
180 except pkg_resources.DistributionNotFound:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
181 return _do_download(version, download_base, to_dir,
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
182 download_delay)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
183 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
184 if not no_fake:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
185 _create_fake_setuptools_pkg_info(to_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
186
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
187
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
188 def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
189 to_dir=os.curdir, delay=15):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
190 """Download distribute from a specified location and return its filename
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
191
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
192 `version` should be a valid distribute version number that is available
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
193 as an egg for download under the `download_base` URL (which should end
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
194 with a '/'). `to_dir` is the directory where the egg will be downloaded.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
195 `delay` is the number of seconds to pause before an actual download
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
196 attempt.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
197 """
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
198 # making sure we use the absolute path
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
199 to_dir = os.path.abspath(to_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
200 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
201 from urllib.request import urlopen
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
202 except ImportError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
203 from urllib2 import urlopen
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
204 tgz_name = "distribute-%s.tar.gz" % version
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
205 url = download_base + tgz_name
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
206 saveto = os.path.join(to_dir, tgz_name)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
207 src = dst = None
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
208 if not os.path.exists(saveto): # Avoid repeated downloads
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
209 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
210 log.warn("Downloading %s", url)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
211 src = urlopen(url)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
212 # Read/write all in one block, so we don't create a corrupt file
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
213 # if the download is interrupted.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
214 data = src.read()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
215 dst = open(saveto, "wb")
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
216 dst.write(data)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
217 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
218 if src:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
219 src.close()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
220 if dst:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
221 dst.close()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
222 return os.path.realpath(saveto)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
223
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
224
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
225 def _no_sandbox(function):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
226 def __no_sandbox(*args, **kw):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
227 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
228 from setuptools.sandbox import DirectorySandbox
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
229 if not hasattr(DirectorySandbox, '_old'):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
230 def violation(*args):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
231 pass
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
232 DirectorySandbox._old = DirectorySandbox._violation
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
233 DirectorySandbox._violation = violation
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
234 patched = True
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
235 else:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
236 patched = False
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
237 except ImportError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
238 patched = False
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
239
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
240 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
241 return function(*args, **kw)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
242 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
243 if patched:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
244 DirectorySandbox._violation = DirectorySandbox._old
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
245 del DirectorySandbox._old
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
246
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
247 return __no_sandbox
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
248
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
249
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
250 def _patch_file(path, content):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
251 """Will backup the file then patch it"""
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
252 f = open(path)
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
253 existing_content = f.read()
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
254 f.close()
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
255 if existing_content == content:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
256 # already patched
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
257 log.warn('Already patched.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
258 return False
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
259 log.warn('Patching...')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
260 _rename_path(path)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
261 f = open(path, 'w')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
262 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
263 f.write(content)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
264 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
265 f.close()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
266 return True
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
267
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
268 _patch_file = _no_sandbox(_patch_file)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
269
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
270
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
271 def _same_content(path, content):
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
272 f = open(path)
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
273 existing_content = f.read()
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
274 f.close()
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
275 return existing_content == content
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
276
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
277
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
278 def _rename_path(path):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
279 new_name = path + '.OLD.%s' % time.time()
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
280 log.warn('Renaming %s to %s', path, new_name)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
281 os.rename(path, new_name)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
282 return new_name
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
283
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
284
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
285 def _remove_flat_installation(placeholder):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
286 if not os.path.isdir(placeholder):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
287 log.warn('Unkown installation at %s', placeholder)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
288 return False
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
289 found = False
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
290 for file in os.listdir(placeholder):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
291 if fnmatch.fnmatch(file, 'setuptools*.egg-info'):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
292 found = True
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
293 break
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
294 if not found:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
295 log.warn('Could not locate setuptools*.egg-info')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
296 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
297
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
298 log.warn('Moving elements out of the way...')
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
299 pkg_info = os.path.join(placeholder, file)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
300 if os.path.isdir(pkg_info):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
301 patched = _patch_egg_dir(pkg_info)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
302 else:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
303 patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
304
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
305 if not patched:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
306 log.warn('%s already patched.', pkg_info)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
307 return False
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
308 # now let's move the files out of the way
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
309 for element in ('setuptools', 'pkg_resources.py', 'site.py'):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
310 element = os.path.join(placeholder, element)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
311 if os.path.exists(element):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
312 _rename_path(element)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
313 else:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
314 log.warn('Could not find the %s element of the '
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
315 'Setuptools distribution', element)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
316 return True
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
317
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
318 _remove_flat_installation = _no_sandbox(_remove_flat_installation)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
319
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
320
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
321 def _after_install(dist):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
322 log.warn('After install bootstrap.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
323 placeholder = dist.get_command_obj('install').install_purelib
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
324 _create_fake_setuptools_pkg_info(placeholder)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
325
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
326
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
327 def _create_fake_setuptools_pkg_info(placeholder):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
328 if not placeholder or not os.path.exists(placeholder):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
329 log.warn('Could not find the install location')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
330 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
331 pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1])
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
332 setuptools_file = 'setuptools-%s-py%s.egg-info' % \
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
333 (SETUPTOOLS_FAKED_VERSION, pyver)
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
334 pkg_info = os.path.join(placeholder, setuptools_file)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
335 if os.path.exists(pkg_info):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
336 log.warn('%s already exists', pkg_info)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
337 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
338
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
339 log.warn('Creating %s', pkg_info)
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
340 try:
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
341 f = open(pkg_info, 'w')
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
342 except EnvironmentError:
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
343 log.warn("Don't have permissions to write %s, skipping", pkg_info)
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
344 return
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
345 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
346 f.write(SETUPTOOLS_PKG_INFO)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
347 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
348 f.close()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
349
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
350 pth_file = os.path.join(placeholder, 'setuptools.pth')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
351 log.warn('Creating %s', pth_file)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
352 f = open(pth_file, 'w')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
353 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
354 f.write(os.path.join(os.curdir, setuptools_file))
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
355 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
356 f.close()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
357
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
358 _create_fake_setuptools_pkg_info = _no_sandbox(
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
359 _create_fake_setuptools_pkg_info
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
360 )
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
361
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
362
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
363 def _patch_egg_dir(path):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
364 # let's check if it's already patched
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
365 pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
366 if os.path.exists(pkg_info):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
367 if _same_content(pkg_info, SETUPTOOLS_PKG_INFO):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
368 log.warn('%s already patched.', pkg_info)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
369 return False
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
370 _rename_path(path)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
371 os.mkdir(path)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
372 os.mkdir(os.path.join(path, 'EGG-INFO'))
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
373 pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
374 f = open(pkg_info, 'w')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
375 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
376 f.write(SETUPTOOLS_PKG_INFO)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
377 finally:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
378 f.close()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
379 return True
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
380
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
381 _patch_egg_dir = _no_sandbox(_patch_egg_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
382
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
383
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
384 def _before_install():
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
385 log.warn('Before install bootstrap.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
386 _fake_setuptools()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
387
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
388
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
389 def _under_prefix(location):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
390 if 'install' not in sys.argv:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
391 return True
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
392 args = sys.argv[sys.argv.index('install') + 1:]
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
393 for index, arg in enumerate(args):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
394 for option in ('--root', '--prefix'):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
395 if arg.startswith('%s=' % option):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
396 top_dir = arg.split('root=')[-1]
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
397 return location.startswith(top_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
398 elif arg == option:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
399 if len(args) > index:
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
400 top_dir = args[index + 1]
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
401 return location.startswith(top_dir)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
402 if arg == '--user' and USER_SITE is not None:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
403 return location.startswith(USER_SITE)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
404 return True
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
405
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
406
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
407 def _fake_setuptools():
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
408 log.warn('Scanning installed packages')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
409 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
410 import pkg_resources
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
411 except ImportError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
412 # we're cool
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
413 log.warn('Setuptools or Distribute does not seem to be installed.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
414 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
415 ws = pkg_resources.working_set
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
416 try:
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
417 setuptools_dist = ws.find(
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
418 pkg_resources.Requirement.parse('setuptools', replacement=False)
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
419 )
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
420 except TypeError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
421 # old distribute API
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
422 setuptools_dist = ws.find(
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
423 pkg_resources.Requirement.parse('setuptools')
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
424 )
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
425
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
426 if setuptools_dist is None:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
427 log.warn('No setuptools distribution found')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
428 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
429 # detecting if it was already faked
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
430 setuptools_location = setuptools_dist.location
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
431 log.warn('Setuptools installation detected at %s', setuptools_location)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
432
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
433 # if --root or --preix was provided, and if
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
434 # setuptools is not located in them, we don't patch it
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
435 if not _under_prefix(setuptools_location):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
436 log.warn('Not patching, --root or --prefix is installing Distribute'
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
437 ' in another location')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
438 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
439
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
440 # let's see if its an egg
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
441 if not setuptools_location.endswith('.egg'):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
442 log.warn('Non-egg installation')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
443 res = _remove_flat_installation(setuptools_location)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
444 if not res:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
445 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
446 else:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
447 log.warn('Egg installation')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
448 pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
449 if (os.path.exists(pkg_info) and
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
450 _same_content(pkg_info, SETUPTOOLS_PKG_INFO)):
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
451 log.warn('Already patched.')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
452 return
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
453 log.warn('Patching...')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
454 # let's create a fake egg replacing setuptools one
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
455 res = _patch_egg_dir(setuptools_location)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
456 if not res:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
457 return
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
458 log.warn('Patching complete.')
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
459 _relaunch()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
460
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
461
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
462 def _relaunch():
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
463 log.warn('Relaunching...')
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
464 # we have to relaunch the process
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
465 # pip marker to avoid a relaunch bug
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
466 _cmd1 = ['-c', 'install', '--single-version-externally-managed']
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
467 _cmd2 = ['-c', 'install', '--record']
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
468 if sys.argv[:3] == _cmd1 or sys.argv[:3] == _cmd2:
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
469 sys.argv[0] = 'setup.py'
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
470 args = [sys.executable] + sys.argv
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
471 sys.exit(subprocess.call(args))
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
472
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
473
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
474 def _extractall(self, path=".", members=None):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
475 """Extract all members from the archive to the current working
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
476 directory and set owner, modification time and permissions on
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
477 directories afterwards. `path' specifies a different directory
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
478 to extract to. `members' is optional and must be a subset of the
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
479 list returned by getmembers().
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
480 """
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
481 import copy
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
482 import operator
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
483 from tarfile import ExtractError
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
484 directories = []
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
485
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
486 if members is None:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
487 members = self
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
488
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
489 for tarinfo in members:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
490 if tarinfo.isdir():
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
491 # Extract directories with a safe mode.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
492 directories.append(tarinfo)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
493 tarinfo = copy.copy(tarinfo)
586
6a718ede8be1 Fix coding style in setup.py.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 231
diff changeset
494 tarinfo.mode = 448 # decimal for oct 0700
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
495 self.extract(tarinfo, path)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
496
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
497 # Reverse sort directories.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
498 if sys.version_info < (2, 4):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
499 def sorter(dir1, dir2):
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
500 return cmp(dir1.name, dir2.name)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
501 directories.sort(sorter)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
502 directories.reverse()
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
503 else:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
504 directories.sort(key=operator.attrgetter('name'), reverse=True)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
505
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
506 # Set correct owner, mtime and filemode on directories.
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
507 for tarinfo in directories:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
508 dirpath = os.path.join(path, tarinfo.name)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
509 try:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
510 self.chown(tarinfo, dirpath)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
511 self.utime(tarinfo, dirpath)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
512 self.chmod(tarinfo, dirpath)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
513 except ExtractError:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
514 e = sys.exc_info()[1]
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
515 if self.errorlevel > 1:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
516 raise
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
517 else:
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
518 self._dbg(1, "tarfile: %s" % e)
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
519
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
520
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
521 def _build_install_args(options):
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
522 """
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
523 Build the arguments to 'python setup.py install' on the distribute package
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
524 """
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
525 install_args = []
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
526 if options.user_install:
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
527 if sys.version_info < (2, 6):
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
528 log.warn("--user requires Python 2.6 or later")
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
529 raise SystemExit(1)
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
530 install_args.append('--user')
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
531 return install_args
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
532
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
533 def _parse_args():
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
534 """
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
535 Parse the command line for options
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
536 """
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
537 parser = optparse.OptionParser()
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
538 parser.add_option(
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
539 '--user', dest='user_install', action='store_true', default=False,
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
540 help='install in user site package (requires Python 2.6 or later)')
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
541 parser.add_option(
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
542 '--download-base', dest='download_base', metavar="URL",
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
543 default=DEFAULT_URL,
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
544 help='alternative URL from where to download the distribute package')
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
545 options, args = parser.parse_args()
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
546 # positional arguments are ignored
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
547 return options
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
548
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
549 def main(version=DEFAULT_VERSION):
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
550 """Install or upgrade setuptools and EasyInstall"""
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
551 options = _parse_args()
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
552 tarball = download_setuptools(download_base=options.download_base)
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
553 return _install(tarball, _build_install_args(options))
231
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
554
f68a9a429c88 added distribute bootstrap file
Goffi <goffi@goffi.org>
parents:
diff changeset
555 if __name__ == '__main__':
843
efd92a645220 misc: update distribute_setup.py to version 0.6.49
Thomas Preud'homme <robotux@celest.fr>
parents: 586
diff changeset
556 sys.exit(main())