Commit 1f98cb28 authored by Jason R. Coombs's avatar Jason R. Coombs

Merged in vinay.sajip/setuptools/single-codebase (pull request #5)

Additional changes relating to single codebase support
parents 48b0d2bf 1c5400fd
......@@ -4,6 +4,7 @@ syntax: glob
*.swp
.coverage
distribute.egg-info
setuptools.egg-info
build
dist
lib
......
......@@ -40,8 +40,8 @@ source_suffix = '.txt'
master_doc = 'index'
# General information about the project.
project = u'Setuptools'
copyright = u'2009-2013, The fellowship of the packaging'
project = 'Setuptools'
copyright = '2009-2013, The fellowship of the packaging'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
......@@ -175,8 +175,8 @@ htmlhelp_basename = 'Setuptoolsdoc'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('index', 'Setuptools.tex', ur'Setuptools Documentation',
ur'The fellowship of the packaging', 'manual'),
('index', 'Setuptools.tex', 'Setuptools Documentation',
'The fellowship of the packaging', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
......
......@@ -2315,7 +2315,7 @@ class EntryPoint(object):
def parse_map(cls, data, dist=None):
"""Parse a map of entry point groups"""
if isinstance(data,dict):
data = list(data.items())
data = data.items()
else:
data = split_sections(data)
maps = {}
......@@ -3009,4 +3009,3 @@ run_main = run_script # backward compatibility
add_activation_listener(lambda dist: dist.activate())
working_set.entries=[]; list(map(working_set.add_entry,sys.path)) # match order
[distutils.commands]
bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm
rotate = setuptools.command.rotate:rotate
develop = setuptools.command.develop:develop
setopt = setuptools.command.setopt:setopt
build_py = setuptools.command.build_py:build_py
saveopts = setuptools.command.saveopts:saveopts
egg_info = setuptools.command.egg_info:egg_info
register = setuptools.command.register:register
upload_docs = setuptools.command.upload_docs:upload_docs
install_egg_info = setuptools.command.install_egg_info:install_egg_info
alias = setuptools.command.alias:alias
easy_install = setuptools.command.easy_install:easy_install
install_scripts = setuptools.command.install_scripts:install_scripts
bdist_wininst = setuptools.command.bdist_wininst:bdist_wininst
bdist_egg = setuptools.command.bdist_egg:bdist_egg
install = setuptools.command.install:install
test = setuptools.command.test:test
install_lib = setuptools.command.install_lib:install_lib
build_ext = setuptools.command.build_ext:build_ext
sdist = setuptools.command.sdist:sdist
[egg_info.writers]
dependency_links.txt = setuptools.command.egg_info:overwrite_arg
requires.txt = setuptools.command.egg_info:write_requirements
PKG-INFO = setuptools.command.egg_info:write_pkg_info
eager_resources.txt = setuptools.command.egg_info:overwrite_arg
top_level.txt = setuptools.command.egg_info:write_toplevel_names
namespace_packages.txt = setuptools.command.egg_info:overwrite_arg
entry_points.txt = setuptools.command.egg_info:write_entries
depends.txt = setuptools.command.egg_info:warn_depends_obsolete
[console_scripts]
easy_install = setuptools.command.easy_install:main
easy_install-2.7 = setuptools.command.easy_install:main
[setuptools.file_finders]
svn_cvs = setuptools.command.sdist:_default_revctrl
[distutils.setup_keywords]
dependency_links = setuptools.dist:assert_string_list
entry_points = setuptools.dist:check_entry_points
extras_require = setuptools.dist:check_extras
use_2to3_exclude_fixers = setuptools.dist:assert_string_list
package_data = setuptools.dist:check_package_data
install_requires = setuptools.dist:check_requirements
use_2to3 = setuptools.dist:assert_bool
use_2to3_fixers = setuptools.dist:assert_string_list
include_package_data = setuptools.dist:assert_bool
exclude_package_data = setuptools.dist:check_package_data
namespace_packages = setuptools.dist:check_nsp
test_suite = setuptools.dist:check_test_suite
eager_resources = setuptools.dist:assert_string_list
zip_safe = setuptools.dist:assert_bool
test_loader = setuptools.dist:check_importable
packages = setuptools.dist:check_packages
convert_2to3_doctests = setuptools.dist:assert_string_list
tests_require = setuptools.dist:check_requirements
[setuptools.installation]
eggsecutable = setuptools.command.easy_install:bootstrap
[console_scripts]
easy_install = setuptools.command.easy_install:main
easy_install-3.3 = setuptools.command.easy_install:main
[distutils.setup_keywords]
namespace_packages = setuptools.dist:check_nsp
use_2to3_exclude_fixers = setuptools.dist:assert_string_list
package_data = setuptools.dist:check_package_data
use_2to3 = setuptools.dist:assert_bool
install_requires = setuptools.dist:check_requirements
entry_points = setuptools.dist:check_entry_points
convert_2to3_doctests = setuptools.dist:assert_string_list
dependency_links = setuptools.dist:assert_string_list
test_suite = setuptools.dist:check_test_suite
test_loader = setuptools.dist:check_importable
tests_require = setuptools.dist:check_requirements
packages = setuptools.dist:check_packages
use_2to3_fixers = setuptools.dist:assert_string_list
extras_require = setuptools.dist:check_extras
include_package_data = setuptools.dist:assert_bool
eager_resources = setuptools.dist:assert_string_list
exclude_package_data = setuptools.dist:check_package_data
zip_safe = setuptools.dist:assert_bool
[distutils.commands]
bdist_wininst = setuptools.command.bdist_wininst:bdist_wininst
test = setuptools.command.test:test
easy_install = setuptools.command.easy_install:easy_install
install_egg_info = setuptools.command.install_egg_info:install_egg_info
upload_docs = setuptools.command.upload_docs:upload_docs
setopt = setuptools.command.setopt:setopt
install = setuptools.command.install:install
bdist_egg = setuptools.command.bdist_egg:bdist_egg
alias = setuptools.command.alias:alias
saveopts = setuptools.command.saveopts:saveopts
sdist = setuptools.command.sdist:sdist
rotate = setuptools.command.rotate:rotate
develop = setuptools.command.develop:develop
install_lib = setuptools.command.install_lib:install_lib
register = setuptools.command.register:register
build_py = setuptools.command.build_py:build_py
install_scripts = setuptools.command.install_scripts:install_scripts
bdist_rpm = setuptools.command.bdist_rpm:bdist_rpm
egg_info = setuptools.command.egg_info:egg_info
build_ext = setuptools.command.build_ext:build_ext
[setuptools.file_finders]
svn_cvs = setuptools.command.sdist:_default_revctrl
[egg_info.writers]
requires.txt = setuptools.command.egg_info:write_requirements
namespace_packages.txt = setuptools.command.egg_info:overwrite_arg
entry_points.txt = setuptools.command.egg_info:write_entries
top_level.txt = setuptools.command.egg_info:write_toplevel_names
depends.txt = setuptools.command.egg_info:warn_depends_obsolete
PKG-INFO = setuptools.command.egg_info:write_pkg_info
eager_resources.txt = setuptools.command.egg_info:overwrite_arg
dependency_links.txt = setuptools.command.egg_info:overwrite_arg
[setuptools.installation]
eggsecutable = setuptools.command.easy_install:bootstrap
......@@ -3,11 +3,11 @@
[ssl:sys_platform=='win32' and python_version=='2.4']
ctypes==1.0.2
[ssl:sys_platform=='win32']
wincertstore==0.1
[ssl:python_version in '2.4, 2.5']
ssl==1.16
[certs]
certifi==0.0.8
[ssl:python_version in '2.4, 2.5']
ssl==1.16
\ No newline at end of file
[ssl:sys_platform=='win32']
wincertstore==0.1
\ No newline at end of file
......@@ -58,7 +58,10 @@ from pkg_resources import yield_lines, normalize_path, resource_string, \
DistributionNotFound, VersionConflict, \
DEVELOP_DIST
sys_executable = os.path.normpath(sys.executable)
if '__VENV_LAUNCHER__' in os.environ:
sys_executable = os.environ['__VENV_LAUNCHER__']
else:
sys_executable = os.path.normpath(sys.executable)
__all__ = [
'samefile', 'easy_install', 'PthDistributions', 'extract_wininst_cfg',
......@@ -282,6 +285,8 @@ class easy_install(Command):
self.script_dir = self.install_scripts
# default --record from the install command
self.set_undefined_options('install', ('record', 'record'))
# Should this be moved to the if statement below? It's not used
# elsewhere
normpath = map(normalize_path, sys.path)
self.all_site_dirs = get_site_dirs()
if self.site_dirs is not None:
......
......@@ -154,7 +154,7 @@ class test(Command):
for name in sys.modules:
if name.startswith(module):
del_modules.append(name)
map(sys.modules.__delitem__, del_modules)
list(map(sys.modules.__delitem__, del_modules))
loader_ep = EntryPoint.parse("x="+self.test_loader)
loader_class = loader_ep.load(require=False)
......
......@@ -23,15 +23,21 @@ try:
except ImportError:
from setuptools.command.upload import upload
from setuptools.compat import httplib, urlparse
from setuptools.compat import httplib, urlparse, unicode, iteritems
_IS_PYTHON3 = sys.version > '3'
if _IS_PYTHON3:
errors = 'surrogateescape'
else:
errors = 'strict'
# This is not just a replacement for byte literals
# but works as a general purpose encoder
def b(s, encoding='utf-8'):
if isinstance(s, unicode):
return s.encode(encoding)
return s.encode(encoding, errors)
return s
......@@ -127,7 +133,7 @@ class upload_docs(upload):
sep_boundary = b('\n--') + b(boundary)
end_boundary = sep_boundary + b('--')
body = []
for key, values in data.iteritems():
for key, values in iteritems(data):
title = '\nContent-Disposition: form-data; name="%s"' % key
# handle multiple entries for the same name
if type(values) != type([]):
......
......@@ -35,7 +35,7 @@ class Extension(_Extension):
if source.endswith('.pyx'):
source = source[:-4] + '.c'
return source
self.sources = map(pyx_to_c, self.sources)
self.sources = list(map(pyx_to_c, self.sources))
class Library(Extension):
"""Just like a regular Extension, but built as a library instead"""
......
......@@ -179,7 +179,7 @@ def find_external_links(url, page):
for match in REL.finditer(page):
tag, rel = match.groups()
rels = map(str.strip, rel.lower().split(','))
rels = set(map(str.strip, rel.lower().split(',')))
if 'homepage' in rels or 'download' in rels:
for match in HREF.finditer(tag):
yield urljoin(url, htmldecode(match.group(1)))
......@@ -699,7 +699,7 @@ class PackageIndex(Environment):
elif scheme.startswith('hg+'):
return self._download_hg(url, filename)
elif scheme=='file':
return url2pathname(urlparse.urlparse(url)[2])
return url2pathname(urlparse(url)[2])
else:
self.url_ok(url, True) # raises error if not allowed
return self._attempt_download(url, filename)
......@@ -749,10 +749,10 @@ class PackageIndex(Environment):
url = url.split('#',1)[0] # remove any fragment for svn's sake
creds = ''
if url.lower().startswith('svn:') and '@' in url:
scheme, netloc, path, p, q, f = urlparse.urlparse(url)
scheme, netloc, path, p, q, f = urlparse(url)
if not netloc and path.startswith('//') and '/' in path[2:]:
netloc, path = path[2:].split('/',1)
auth, host = urllib.splituser(netloc)
auth, host = splituser(netloc)
if auth:
if ':' in auth:
user, pw = auth.split(':',1)
......@@ -760,13 +760,13 @@ class PackageIndex(Environment):
else:
creds = " --username="+auth
netloc = host
url = urlparse.urlunparse((scheme, netloc, url, p, q, f))
url = urlunparse((scheme, netloc, url, p, q, f))
self.info("Doing subversion checkout from %s to %s", url, filename)
os.system("svn checkout%s -q %s %s" % (creds, url, filename))
return filename
def _vcs_split_rev_from_url(self, url, pop_prefix=False):
scheme, netloc, path, query, frag = urlparse.urlsplit(url)
scheme, netloc, path, query, frag = urlsplit(url)
scheme = scheme.split('+', 1)[-1]
......@@ -778,7 +778,7 @@ class PackageIndex(Environment):
path, rev = path.rsplit('@', 1)
# Also, discard fragment
url = urlparse.urlunsplit((scheme, netloc, path, query, ''))
url = urlunsplit((scheme, netloc, path, query, ''))
return url, rev
......
......@@ -86,7 +86,7 @@ def run_setup(setup_script, args):
# exclude any encodings modules. See #285
and not mod_name.startswith('encodings.')
]
map(sys.modules.__delitem__, del_modules)
list(map(sys.modules.__delitem__, del_modules))
os.chdir(old_dir)
sys.path[:] = save_path
sys.argv[:] = save_argv
......
......@@ -3,4 +3,7 @@ __requires__ = """%(spec)r"""
from pkg_resources import require; require("""%(spec)r""")
del require
__file__ = """%(dev_path)r"""
execfile(__file__)
try:
execfile(__file__)
except NameError:
exec(compile(open(__file__).read(), __file__, 'exec'))
......@@ -2,7 +2,7 @@
import sys
import os
import unittest
import doctest
from setuptools.tests import doctest
import distutils.core
import distutils.cmd
from distutils.errors import DistutilsOptionError, DistutilsPlatformError
......@@ -11,6 +11,7 @@ from distutils.core import Extension
from distutils.version import LooseVersion
from setuptools.compat import func_code
from setuptools.compat import func_code
import setuptools.dist
import setuptools.depends as dep
from setuptools import Feature
......
......@@ -51,7 +51,7 @@ class TestDevelopTest(unittest.TestCase):
site.USER_SITE = tempfile.mkdtemp()
def tearDown(self):
if sys.version < "2.6" or hasattr(sys, 'real_prefix'):
if sys.version < "2.6" or hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix):
return
os.chdir(self.old_cwd)
......
......@@ -12,6 +12,7 @@ import textwrap
import tarfile
import distutils.core
from setuptools.compat import StringIO, BytesIO, next, urlparse
from setuptools.sandbox import run_setup, SandboxViolation
from setuptools.command.easy_install import easy_install, fix_jython_executable, get_script_args
from setuptools.command.easy_install import PthDistributions
......
......@@ -5,57 +5,62 @@ import zipfile
import pkg_resources
try:
unicode
except NameError:
unicode = str
class EggRemover(unicode):
def __call__(self):
if self in sys.path:
sys.path.remove(self)
if os.path.exists(self):
os.remove(self)
def __call__(self):
if self in sys.path:
sys.path.remove(self)
if os.path.exists(self):
os.remove(self)
class TestZipProvider(object):
finalizers = []
@classmethod
def setup_class(cls):
"create a zip egg and add it to sys.path"
egg = tempfile.NamedTemporaryFile(suffix='.egg', delete=False)
zip_egg = zipfile.ZipFile(egg, 'w')
zip_info = zipfile.ZipInfo()
zip_info.filename = 'mod.py'
zip_info.date_time = 2013, 5, 12, 13, 25, 0
zip_egg.writestr(zip_info, 'x = 3\n')
zip_info = zipfile.ZipInfo()
zip_info.filename = 'data.dat'
zip_info.date_time = 2013, 5, 12, 13, 25, 0
zip_egg.writestr(zip_info, 'hello, world!')
zip_egg.close()
egg.close()
sys.path.append(egg.name)
cls.finalizers.append(EggRemover(egg.name))
@classmethod
def teardown_class(cls):
for finalizer in cls.finalizers:
finalizer()
def test_resource_filename_rewrites_on_change(self):
"""
If a previous call to get_resource_filename has saved the file, but
the file has been subsequently mutated with different file of the
same size and modification time, it should not be overwritten on a
subsequent call to get_resource_filename.
"""
import mod
manager = pkg_resources.ResourceManager()
zp = pkg_resources.ZipProvider(mod)
filename = zp.get_resource_filename(manager, 'data.dat')
assert os.stat(filename).st_mtime == 1368379500
f = open(filename, 'wb')
f.write('hello, world?')
f.close()
os.utime(filename, (1368379500, 1368379500))
filename = zp.get_resource_filename(manager, 'data.dat')
f = open(filename)
assert f.read() == 'hello, world!'
manager.cleanup_resources()
finalizers = []
@classmethod
def setup_class(cls):
"create a zip egg and add it to sys.path"
egg = tempfile.NamedTemporaryFile(suffix='.egg', delete=False)
zip_egg = zipfile.ZipFile(egg, 'w')
zip_info = zipfile.ZipInfo()
zip_info.filename = 'mod.py'
zip_info.date_time = 2013, 5, 12, 13, 25, 0
zip_egg.writestr(zip_info, 'x = 3\n')
zip_info = zipfile.ZipInfo()
zip_info.filename = 'data.dat'
zip_info.date_time = 2013, 5, 12, 13, 25, 0
zip_egg.writestr(zip_info, 'hello, world!')
zip_egg.close()
egg.close()
sys.path.append(egg.name)
cls.finalizers.append(EggRemover(egg.name))
@classmethod
def teardown_class(cls):
for finalizer in cls.finalizers:
finalizer()
def test_resource_filename_rewrites_on_change(self):
"""
If a previous call to get_resource_filename has saved the file, but
the file has been subsequently mutated with different file of the
same size and modification time, it should not be overwritten on a
subsequent call to get_resource_filename.
"""
import mod
manager = pkg_resources.ResourceManager()
zp = pkg_resources.ZipProvider(mod)
filename = zp.get_resource_filename(manager, 'data.dat')
assert os.stat(filename).st_mtime == 1368379500
f = open(filename, 'wb')
f.write('hello, world?')
f.close()
os.utime(filename, (1368379500, 1368379500))
filename = zp.get_resource_filename(manager, 'data.dat')
f = open(filename)
assert f.read() == 'hello, world!'
manager.cleanup_resources()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment