diff -Nru d2to1-0.2.10/.authors d2to1-0.2.11/.authors --- d2to1-0.2.10/.authors 2013-03-05 22:06:05.000000000 +0000 +++ d2to1-0.2.11/.authors 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -embray = Erik M. Bray -sienkiew = Mark Sienkiewicz -iraf = iraf diff -Nru d2to1-0.2.10/CHANGES.rst d2to1-0.2.11/CHANGES.rst --- d2to1-0.2.10/CHANGES.rst 2013-04-10 15:26:36.000000000 +0000 +++ d2to1-0.2.11/CHANGES.rst 2013-08-29 20:18:48.000000000 +0000 @@ -2,10 +2,23 @@ ========= +0.2.11 (2013-08-29) +------------------- + +- Replaced ``distribute_setup.py`` with ``ez_setup.py`` in order to bootstrap + with modern setuptools when necessary. + +- Fixed a couple minor Python 3-specific issues. In particular the + ``data_files`` option could be passed to ``setup()`` as a ``dict_items`` + object instead of a ``list`` which is what would normally be expected. + +- Added a tox.ini (frankly I thought there already was one). + + 0.2.10 (2013-04-10) ------------------- -- Added support for the ``seutp-requires-dist`` option in the ``[metadata]`` +- Added support for the ``setup-requires-dist`` option in the ``[metadata]`` section of setup.cfg. This is analogous to the Setup-Requires-Dist metadata field supported by PEP-426 and uses the ``setup_requires`` argument to setuptools' ``setup()`` to implement it. diff -Nru d2to1-0.2.10/CONTRIBUTORS d2to1-0.2.11/CONTRIBUTORS --- d2to1-0.2.10/CONTRIBUTORS 2013-04-10 15:21:21.000000000 +0000 +++ d2to1-0.2.11/CONTRIBUTORS 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -Erik M. Bray -Mark Sienkiewicz -Monty Taylor -Thomas Grainger diff -Nru d2to1-0.2.10/d2to1/tests/__init__.py d2to1-0.2.11/d2to1/tests/__init__.py --- d2to1-0.2.10/d2to1/tests/__init__.py 2013-03-05 19:08:47.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,90 +0,0 @@ -from __future__ import with_statement -import os -import shutil -import subprocess -import sys -import tempfile - -import pkg_resources - -from .util import rmtree, open_config - - -D2TO1_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), - os.pardir, os.pardir)) - - -def fake_d2to1_dist(): - # Fake a d2to1 distribution from the d2to1 package that these tests reside - # in and make sure it's active on the path with the appropriate entry - # points installed - - class _FakeProvider(pkg_resources.EmptyProvider): - """A fake metadata provider that does almost nothing except to return - entry point metadata. - """ - - def has_metadata(self, name): - return name == 'entry_points.txt' - - def get_metadata(self, name): - if name == 'entry_points.txt': - return '[distutils.setup_keywords]\nd2to1 = d2to1.core:d2to1\n' - else: - return '' - - - sys.path.insert(0, D2TO1_DIR) - if 'd2to1' in sys.modules: - del sys.modules['d2to1'] - if 'd2to1' in pkg_resources.working_set.by_key: - del pkg_resources.working_set.by_key['d2to1'] - dist = pkg_resources.Distribution(location=D2TO1_DIR, project_name='d2to1', - metadata=_FakeProvider()) - pkg_resources.working_set.add(dist) - - -class D2to1TestCase(object): - def setup(self): - self.temp_dir = tempfile.mkdtemp(prefix='d2to1-test-') - self.package_dir = os.path.join(self.temp_dir, 'testpackage') - shutil.copytree(os.path.join(os.path.dirname(__file__), 'testpackage'), - self.package_dir) - self.oldcwd = os.getcwd() - os.chdir(self.package_dir) - - def teardown(self): - os.chdir(self.oldcwd) - # Remove d2to1.testpackage from sys.modules so that it can be freshly - # re-imported by the next test - for k in list(sys.modules): - if (k == 'd2to1_testpackage' or - k.startswith('d2to1_testpackage.')): - del sys.modules[k] - rmtree(self.temp_dir) - - def run_setup(self, *args): - cmd = ('-c', - 'import sys;sys.path.insert(0, %r);' - 'from d2to1.tests import fake_d2to1_dist;' - 'from d2to1.extern.six import exec_;' - 'fake_d2to1_dist();exec_(open("setup.py").read())' % D2TO1_DIR) - return self._run_cmd(sys.executable, cmd + args) - - def run_svn(self, *args): - return self._run_cmd('svn', args) - - def _run_cmd(self, cmd, args): - """ - Runs a command, with the given argument list, in the root of the test - working copy--returns the stdout and stderr streams and the exit code - from the subprocess. - """ - - os.chdir(self.package_dir) - p = subprocess.Popen([cmd] + list(args), stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - - streams = tuple(s.decode('latin1').strip() for s in p.communicate()) - print(streams) - return (streams) + (p.returncode,) diff -Nru d2to1-0.2.10/d2to1/tests/test_commands.py d2to1-0.2.11/d2to1/tests/test_commands.py --- d2to1-0.2.10/d2to1/tests/test_commands.py 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/test_commands.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -from . import D2to1TestCase - - -class TestCommands(D2to1TestCase): - def test_custom_build_py_command(self): - """ - Test that a custom subclass of the build_py command runs when listed in - the commands [global] option, rather than the normal build command. - """ - - stdout, _, return_code = self.run_setup('build_py') - assert 'Running custom build_py command.' in stdout - assert return_code == 0 diff -Nru d2to1-0.2.10/d2to1/tests/test_core.py d2to1-0.2.11/d2to1/tests/test_core.py --- d2to1-0.2.10/d2to1/tests/test_core.py 2013-03-05 15:17:43.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/test_core.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -import glob -import os -import tarfile - -from . import D2to1TestCase - - -VERSION = '0.1.dev' - - -class TestCore(D2to1TestCase): - def test_setup_py_version(self): - """ - Test that the `./setup.py --version` command returns the correct - value without balking. - """ - - self.run_setup('egg_info') - stdout, _, _ = self.run_setup('--version') - assert stdout == VERSION - - def test_setup_py_keywords(self): - """ - Test that the `./setup.py --keywords` command returns the correct - value without balking. - """ - - self.run_setup('egg_info') - stdout, _, _ = self.run_setup('--keywords') - assert stdout == 'packaging,distutils,setuptools' - - def test_sdist_extra_files(self): - """ - Test that the extra files are correctly added. - """ - - stdout, _, return_code = self.run_setup('sdist', '--formats=gztar') - - # There can be only one - try: - tf_path = glob.glob(os.path.join('dist', '*.tar.gz'))[0] - except IndexError: - assert False, 'source dist not found' - - tf = tarfile.open(tf_path) - names = ['/'.join(p.split('/')[1:]) for p in tf.getnames()] - - assert 'extra-file.txt' in names diff -Nru d2to1-0.2.10/d2to1/tests/test_hooks.py d2to1-0.2.11/d2to1/tests/test_hooks.py --- d2to1-0.2.10/d2to1/tests/test_hooks.py 2013-03-05 19:08:47.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/test_hooks.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ -from __future__ import with_statement - -import os -import textwrap - -from . import D2to1TestCase -from .util import open_config - - -class TestHooks(D2to1TestCase): - def setup(self): - super(TestHooks, self).setup() - with open_config(os.path.join(self.package_dir, 'setup.cfg')) as cfg: - cfg.set('global', 'setup-hooks', - 'd2to1_testpackage._setup_hooks.test_hook_1\n' - 'd2to1_testpackage._setup_hooks.test_hook_2') - cfg.set('build_ext', 'pre-hook.test_pre_hook', - 'd2to1_testpackage._setup_hooks.test_pre_hook') - cfg.set('build_ext', 'post-hook.test_post_hook', - 'd2to1_testpackage._setup_hooks.test_post_hook') - - def test_global_setup_hooks(self): - """ - Test that setup_hooks listed in the [global] section of setup.cfg are - executed in order. - """ - - stdout, _, return_code = self.run_setup('egg_info') - assert 'test_hook_1\ntest_hook_2' in stdout - assert return_code == 0 - - def test_command_hooks(self): - """ - Simple test that the appropriate command hooks run at the - beginning/end of the appropriate command. - """ - - stdout, _, return_code = self.run_setup('egg_info') - assert 'build_ext pre-hook' not in stdout - assert 'build_ext post-hook' not in stdout - assert return_code == 0 - - stdout, _, return_code = self.run_setup('build_ext') - assert textwrap.dedent(""" - running build_ext - running pre_hook d2to1_testpackage._setup_hooks.test_pre_hook for command build_ext - build_ext pre-hook - """) in stdout - assert stdout.endswith('build_ext post-hook') - assert return_code == 0 - - diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/CHANGES.txt d2to1-0.2.11/d2to1/tests/testpackage/CHANGES.txt --- d2to1-0.2.10/d2to1/tests/testpackage/CHANGES.txt 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/CHANGES.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -Changelog -=========== - -0.3 (unreleased) ------------------- - -- The ``glob_data_files`` hook became a pre-command hook for the install_data - command instead of being a setup-hook. This is to support the additional - functionality of requiring data_files with relative destination paths to be - install relative to the package's install path (i.e. site-packages). - -- Dropped support for and deprecated the easier_install custom command. - Although it should still work, it probably won't be used anymore for - stsci_python packages. - -- Added support for the ``build_optional_ext`` command, which replaces/extends - the default ``build_ext`` command. See the README for more details. - -- Added the ``tag_svn_revision`` setup_hook as a replacement for the - setuptools-specific tag_svn_revision option to the egg_info command. This - new hook is easier to use than the old tag_svn_revision option: It's - automatically enabled by the presence of ``.dev`` in the version string, and - disabled otherwise. - -- The ``svn_info_pre_hook`` and ``svn_info_post_hook`` have been replaced with - ``version_pre_command_hook`` and ``version_post_command_hook`` respectively. - However, a new ``version_setup_hook``, which has the same purpose, has been - added. It is generally easier to use and will give more consistent results - in that it will run every time setup.py is run, regardless of which command - is used. ``stsci.distutils`` itself uses this hook--see the `setup.cfg` file - and `stsci/distutils/__init__.py` for example usage. - -- Instead of creating an `svninfo.py` module, the new ``version_`` hooks create - a file called `version.py`. In addition to the SVN info that was included - in `svninfo.py`, it includes a ``__version__`` variable to be used by the - package's `__init__.py`. This allows there to be a hard-coded - ``__version__`` variable included in the source code, rather than using - pkg_resources to get the version. - -- In `version.py`, the variables previously named ``__svn_version__`` and - ``__full_svn_info__`` are now named ``__svn_revision__`` and - ``__svn_full_info__``. - -- Fixed a bug when using stsci.distutils in the installation of other packages - in the ``stsci.*`` namespace package. If stsci.distutils was not already - installed, and was downloaded automatically by distribute through the - setup_requires option, then ``stsci.distutils`` would fail to import. This - is because the way the namespace package (nspkg) mechanism currently works, - all packages belonging to the nspkg *must* be on the import path at initial - import time. - - So when installing stsci.tools, for example, if ``stsci.tools`` is imported - from within the source code at install time, but before ``stsci.distutils`` - is downloaded and added to the path, the ``stsci`` package is already - imported and can't be extended to include the path of ``stsci.distutils`` - after the fact. The easiest way of dealing with this, it seems, is to - delete ``stsci`` from ``sys.modules``, which forces it to be reimported, now - the its ``__path__`` extended to include ``stsci.distutil``'s path. - - -0.2.2 (2011-11-09) ------------------- - -- Fixed check for the issue205 bug on actual setuptools installs; before it - only worked on distribute. setuptools has the issue205 bug prior to version - 0.6c10. - -- Improved the fix for the issue205 bug, especially on setuptools. - setuptools, prior to 0.6c10, did not back of sys.modules either before - sandboxing, which causes serious problems. In fact, it's so bad that it's - not enough to add a sys.modules backup to the current sandbox: It's in fact - necessary to monkeypatch setuptools.sandbox.run_setup so that any subsequent - calls to it also back up sys.modules. - - -0.2.1 (2011-09-02) ------------------- - -- Fixed the dependencies so that setuptools is requirement but 'distribute' - specifically. Previously installation could fail if users had plain - setuptools installed and not distribute - -0.2 (2011-08-23) ------------------- - -- Initial public release diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/d2to1_testpackage/_setup_hooks.py d2to1-0.2.11/d2to1/tests/testpackage/d2to1_testpackage/_setup_hooks.py --- d2to1-0.2.10/d2to1/tests/testpackage/d2to1_testpackage/_setup_hooks.py 2013-03-05 19:08:47.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/d2to1_testpackage/_setup_hooks.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -from distutils.command.build_py import build_py - - -def test_hook_1(config): - print('test_hook_1') - - -def test_hook_2(config): - print('test_hook_2') - - -class test_command(build_py): - command_name = 'build_py' - - def run(self): - print('Running custom build_py command.') - return build_py.run(self) - - -def test_pre_hook(cmdobj): - print('build_ext pre-hook') - - -def test_post_hook(cmdobj): - print('build_ext post-hook') diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/distribute_setup.py d2to1-0.2.11/d2to1/tests/testpackage/distribute_setup.py --- d2to1-0.2.10/d2to1/tests/testpackage/distribute_setup.py 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/distribute_setup.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,485 +0,0 @@ -#!python -"""Bootstrap distribute installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from distribute_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import os -import sys -import time -import fnmatch -import tempfile -import tarfile -from distutils import log - -try: - from site import USER_SITE -except ImportError: - USER_SITE = None - -try: - import subprocess - - def _python_cmd(*args): - args = (sys.executable,) + args - return subprocess.call(args) == 0 - -except ImportError: - # will be used for python 2.3 - def _python_cmd(*args): - args = (sys.executable,) + args - # quoting arguments if windows - if sys.platform == 'win32': - def quote(arg): - if ' ' in arg: - return '"%s"' % arg - return arg - args = [quote(arg) for arg in args] - return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 - -DEFAULT_VERSION = "0.6.19" -DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" -SETUPTOOLS_FAKED_VERSION = "0.6c11" - -SETUPTOOLS_PKG_INFO = """\ -Metadata-Version: 1.0 -Name: setuptools -Version: %s -Summary: xxxx -Home-page: xxx -Author: xxx -Author-email: xxx -License: xxx -Description: xxx -""" % SETUPTOOLS_FAKED_VERSION - - -def _install(tarball): - # extracting the tarball - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - tar = tarfile.open(tarball) - _extractall(tar) - 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 - log.warn('Installing Distribute') - if not _python_cmd('setup.py', 'install'): - log.warn('Something went wrong during the installation.') - log.warn('See the error message above.') - finally: - os.chdir(old_wd) - - -def _build_egg(egg, tarball, to_dir): - # extracting the tarball - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - tar = tarfile.open(tarball) - _extractall(tar) - 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) - - # building an egg - log.warn('Building a Distribute egg in %s', to_dir) - _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) - - finally: - os.chdir(old_wd) - # returning the result - log.warn(egg) - if not os.path.exists(egg): - raise IOError('Could not build the egg.') - - -def _do_download(version, download_base, to_dir, download_delay): - egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg' - % (version, sys.version_info[0], sys.version_info[1])) - if not os.path.exists(egg): - tarball = download_setuptools(version, download_base, - to_dir, download_delay) - _build_egg(egg, tarball, to_dir) - sys.path.insert(0, egg) - import setuptools - setuptools.bootstrap_install_from = egg - - -def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, download_delay=15, no_fake=True): - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - was_imported = 'pkg_resources' in sys.modules or \ - 'setuptools' in sys.modules - try: - try: - import pkg_resources - if not hasattr(pkg_resources, '_distribute'): - if not no_fake: - _fake_setuptools() - raise ImportError - except ImportError: - return _do_download(version, download_base, to_dir, download_delay) - try: - pkg_resources.require("distribute>="+version) - return - except pkg_resources.VersionConflict: - e = sys.exc_info()[1] - if was_imported: - sys.stderr.write( - "The required version of distribute (>=%s) is not available,\n" - "and can't be installed while this script is running. Please\n" - "install a more recent version first, using\n" - "'easy_install -U distribute'." - "\n\n(Currently using %r)\n" % (version, e.args[0])) - sys.exit(2) - else: - del pkg_resources, sys.modules['pkg_resources'] # reload ok - return _do_download(version, download_base, to_dir, - download_delay) - except pkg_resources.DistributionNotFound: - return _do_download(version, download_base, to_dir, - download_delay) - finally: - if not no_fake: - _create_fake_setuptools_pkg_info(to_dir) - -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 - - `version` should be a valid distribute 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 the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download - attempt. - """ - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - try: - from urllib.request import urlopen - except ImportError: - from urllib2 import urlopen - 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: - log.warn("Downloading %s", url) - src = 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) - finally: - if src: - src.close() - if dst: - dst.close() - return os.path.realpath(saveto) - -def _no_sandbox(function): - def __no_sandbox(*args, **kw): - try: - from setuptools.sandbox import DirectorySandbox - if not hasattr(DirectorySandbox, '_old'): - def violation(*args): - pass - DirectorySandbox._old = DirectorySandbox._violation - DirectorySandbox._violation = violation - patched = True - else: - patched = False - except ImportError: - patched = False - - try: - return function(*args, **kw) - finally: - if patched: - DirectorySandbox._violation = DirectorySandbox._old - del DirectorySandbox._old - - return __no_sandbox - -def _patch_file(path, content): - """Will backup the file then patch it""" - existing_content = open(path).read() - if existing_content == content: - # already patched - log.warn('Already patched.') - return False - log.warn('Patching...') - _rename_path(path) - f = open(path, 'w') - try: - f.write(content) - finally: - f.close() - return True - -_patch_file = _no_sandbox(_patch_file) - -def _same_content(path, content): - return open(path).read() == content - -def _rename_path(path): - new_name = path + '.OLD.%s' % time.time() - log.warn('Renaming %s into %s', path, new_name) - os.rename(path, new_name) - return new_name - -def _remove_flat_installation(placeholder): - if not os.path.isdir(placeholder): - log.warn('Unkown installation at %s', placeholder) - return False - found = False - for file in os.listdir(placeholder): - if fnmatch.fnmatch(file, 'setuptools*.egg-info'): - found = True - break - if not found: - log.warn('Could not locate setuptools*.egg-info') - return - - log.warn('Removing elements out of the way...') - pkg_info = os.path.join(placeholder, file) - if os.path.isdir(pkg_info): - patched = _patch_egg_dir(pkg_info) - else: - patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO) - - if not patched: - log.warn('%s already patched.', pkg_info) - return False - # now let's move the files out of the way - for element in ('setuptools', 'pkg_resources.py', 'site.py'): - element = os.path.join(placeholder, element) - if os.path.exists(element): - _rename_path(element) - else: - log.warn('Could not find the %s element of the ' - 'Setuptools distribution', element) - return True - -_remove_flat_installation = _no_sandbox(_remove_flat_installation) - -def _after_install(dist): - log.warn('After install bootstrap.') - placeholder = dist.get_command_obj('install').install_purelib - _create_fake_setuptools_pkg_info(placeholder) - -def _create_fake_setuptools_pkg_info(placeholder): - if not placeholder or not os.path.exists(placeholder): - log.warn('Could not find the install location') - return - pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1]) - setuptools_file = 'setuptools-%s-py%s.egg-info' % \ - (SETUPTOOLS_FAKED_VERSION, pyver) - pkg_info = os.path.join(placeholder, setuptools_file) - if os.path.exists(pkg_info): - log.warn('%s already exists', pkg_info) - return - - log.warn('Creating %s', pkg_info) - f = open(pkg_info, 'w') - try: - f.write(SETUPTOOLS_PKG_INFO) - finally: - f.close() - - pth_file = os.path.join(placeholder, 'setuptools.pth') - log.warn('Creating %s', pth_file) - f = open(pth_file, 'w') - try: - f.write(os.path.join(os.curdir, setuptools_file)) - finally: - f.close() - -_create_fake_setuptools_pkg_info = _no_sandbox(_create_fake_setuptools_pkg_info) - -def _patch_egg_dir(path): - # let's check if it's already patched - pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - if os.path.exists(pkg_info): - if _same_content(pkg_info, SETUPTOOLS_PKG_INFO): - log.warn('%s already patched.', pkg_info) - return False - _rename_path(path) - os.mkdir(path) - os.mkdir(os.path.join(path, 'EGG-INFO')) - pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - f = open(pkg_info, 'w') - try: - f.write(SETUPTOOLS_PKG_INFO) - finally: - f.close() - return True - -_patch_egg_dir = _no_sandbox(_patch_egg_dir) - -def _before_install(): - log.warn('Before install bootstrap.') - _fake_setuptools() - - -def _under_prefix(location): - if 'install' not in sys.argv: - return True - args = sys.argv[sys.argv.index('install')+1:] - for index, arg in enumerate(args): - for option in ('--root', '--prefix'): - if arg.startswith('%s=' % option): - top_dir = arg.split('root=')[-1] - return location.startswith(top_dir) - elif arg == option: - if len(args) > index: - top_dir = args[index+1] - return location.startswith(top_dir) - if arg == '--user' and USER_SITE is not None: - return location.startswith(USER_SITE) - return True - - -def _fake_setuptools(): - log.warn('Scanning installed packages') - try: - import pkg_resources - except ImportError: - # we're cool - log.warn('Setuptools or Distribute does not seem to be installed.') - return - ws = pkg_resources.working_set - try: - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools', - replacement=False)) - except TypeError: - # old distribute API - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools')) - - if setuptools_dist is None: - log.warn('No setuptools distribution found') - return - # detecting if it was already faked - setuptools_location = setuptools_dist.location - log.warn('Setuptools installation detected at %s', setuptools_location) - - # if --root or --preix was provided, and if - # setuptools is not located in them, we don't patch it - if not _under_prefix(setuptools_location): - log.warn('Not patching, --root or --prefix is installing Distribute' - ' in another location') - return - - # let's see if its an egg - if not setuptools_location.endswith('.egg'): - log.warn('Non-egg installation') - res = _remove_flat_installation(setuptools_location) - if not res: - return - else: - log.warn('Egg installation') - pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO') - if (os.path.exists(pkg_info) and - _same_content(pkg_info, SETUPTOOLS_PKG_INFO)): - log.warn('Already patched.') - return - log.warn('Patching...') - # let's create a fake egg replacing setuptools one - res = _patch_egg_dir(setuptools_location) - if not res: - return - log.warn('Patched done.') - _relaunch() - - -def _relaunch(): - log.warn('Relaunching...') - # we have to relaunch the process - # pip marker to avoid a relaunch bug - if sys.argv[:3] == ['-c', 'install', '--single-version-externally-managed']: - sys.argv[0] = 'setup.py' - args = [sys.executable] + sys.argv - sys.exit(subprocess.call(args)) - - -def _extractall(self, path=".", members=None): - """Extract all members from the archive to the current working - directory and set owner, modification time and permissions on - directories afterwards. `path' specifies a different directory - to extract to. `members' is optional and must be a subset of the - list returned by getmembers(). - """ - import copy - import operator - from tarfile import ExtractError - directories = [] - - if members is None: - members = self - - for tarinfo in members: - if tarinfo.isdir(): - # Extract directories with a safe mode. - directories.append(tarinfo) - tarinfo = copy.copy(tarinfo) - tarinfo.mode = 448 # decimal for oct 0700 - self.extract(tarinfo, path) - - # Reverse sort directories. - if sys.version_info < (2, 4): - def sorter(dir1, dir2): - return cmp(dir1.name, dir2.name) - directories.sort(sorter) - directories.reverse() - else: - directories.sort(key=operator.attrgetter('name'), reverse=True) - - # Set correct owner, mtime and filemode on directories. - for tarinfo in directories: - dirpath = os.path.join(path, tarinfo.name) - try: - self.chown(tarinfo, dirpath) - self.utime(tarinfo, dirpath) - self.chmod(tarinfo, dirpath) - except ExtractError: - e = sys.exc_info()[1] - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) - - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - tarball = download_setuptools() - _install(tarball) - - -if __name__ == '__main__': - main(sys.argv[1:]) diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/LICENSE.txt d2to1-0.2.11/d2to1/tests/testpackage/LICENSE.txt --- d2to1-0.2.10/d2to1/tests/testpackage/LICENSE.txt 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/LICENSE.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -Copyright (C) 2005 Association of Universities for Research in Astronomy (AURA) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - 3. The name of AURA and its representatives may not be used to - endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/MANIFEST.in d2to1-0.2.11/d2to1/tests/testpackage/MANIFEST.in --- d2to1-0.2.10/d2to1/tests/testpackage/MANIFEST.in 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/MANIFEST.in 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -include data_files/* diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/README.txt d2to1-0.2.11/d2to1/tests/testpackage/README.txt --- d2to1-0.2.10/d2to1/tests/testpackage/README.txt 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/README.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,148 +0,0 @@ -Introduction -============ -This package contains utilities used to package some of STScI's Python -projects; specifically those projects that comprise stsci_python_ and -Astrolib_. - -It currently consists mostly of some setup_hook scripts meant for use with -`distutils2/packaging`_ and/or d2to1_, and a customized easy_install command -meant for use with distribute_. - -This package is not meant for general consumption, though it might be worth -looking at for examples of how to do certain things with your own packages, but -YMMV. - -Features -======== - -Hook Scripts ------------- -Currently the main features of this package are a couple of setup_hook scripts. -In distutils2, a setup_hook is a script that runs at the beginning of any -pysetup command, and can modify the package configuration read from setup.cfg. -There are also pre- and post-command hooks that only run before/after a -specific setup command (eg. build_ext, install) is run. - -stsci.distutils.hooks.use_packages_root -''''''''''''''''''''''''''''''''''''''' -If using the ``packages_root`` option under the ``[files]`` section of -setup.cfg, this hook will add that path to ``sys.path`` so that modules in your -package can be imported and used in setup. This can be used even if -``packages_root`` is not specified--in this case it adds ``''`` to -``sys.path``. - -stsci.distutils.hooks.version_setup_hook -'''''''''''''''''''''''''''''''''''''''' -Creates a Python module called version.py which currently contains four -variables: - -* ``__version__`` (the release version) -* ``__svn_revision__`` (the SVN revision info as returned by the ``svnversion`` - command) -* ``__svn_full_info__`` (as returned by the ``svn info`` command) -* ``__setup_datetime__`` (the date and time that setup.py was last run). - -These variables can be imported in the package's `__init__.py` for degugging -purposes. The version.py module will *only* be created in a package that -imports from the version module in its `__init__.py`. It should be noted that -this is generally preferable to writing these variables directly into -`__init__.py`, since this provides more control and is less likely to -unexpectedly break things in `__init__.py`. - -stsci.distutils.hooks.version_pre_command_hook -'''''''''''''''''''''''''''''''''''''''''''''' -Identical to version_setup_hook, but designed to be used as a pre-command -hook. - -stsci.distutils.hooks.version_post_command_hook -''''''''''''''''''''''''''''''''''''''''''''''' -The complement to version_pre_command_hook. This will delete any version.py -files created during a build in order to prevent them from cluttering an SVN -working copy (note, however, that version.py is *not* deleted from the build/ -directory, so a copy of it is still preserved). It will also not be deleted -if the current directory is not an SVN working copy. For example, if source -code extracted from a source tarball it will be preserved. - -stsci.distutils.hooks.tag_svn_revision -'''''''''''''''''''''''''''''''''''''' -A setup_hook to add the SVN revision of the current working copy path to the -package version string, but only if the version ends in .dev. - -For example, ``mypackage-1.0.dev`` becomes ``mypackage-1.0.dev1234``. This is -in accordance with the version string format standardized by PEP 386. - -This should be used as a replacement for the ``tag_svn_revision`` option to -the egg_info command. This hook is more compatible with packaging/distutils2, -which does not include any VCS support. This hook is also more flexible in -that it turns the revision number on/off depending on the presence of ``.dev`` -in the version string, so that it's not automatically added to the version in -final releases. - -This hook does require the ``svnversion`` command to be available in order to -work. It does not examine the working copy metadata directly. - -stsci.distutils.hooks.numpy_extension_hook -'''''''''''''''''''''''''''''''''''''''''' -This is a pre-command hook for the build_ext command. To use it, add a -``[build_ext]`` section to your setup.cfg, and add to it:: - - pre-hook.numpy-extension-hook = stsci.distutils.hooks.numpy_extension_hook - -This hook must be used to build extension modules that use Numpy. The primary -side-effect of this hook is to add the correct numpy include directories to -`include_dirs`. To use it, add 'numpy' to the 'include-dirs' option of each -extension module that requires numpy to build. The value 'numpy' will be -replaced with the actual path to the numpy includes. - -stsci.distutils.hooks.is_display_option -''''''''''''''''''''''''''''''''''''''' -This is not actually a hook, but is a useful utility function that can be used -in writing other hooks. Basically, it returns ``True`` if setup.py was run -with a "display option" such as --version or --help. This can be used to -prevent your hook from running in such cases. - -stsci.distutils.hooks.glob_data_files -''''''''''''''''''''''''''''''''''''' -A pre-command hook for the install_data command. Allows filename wildcards as -understood by ``glob.glob()`` to be used in the data_files option. This hook -must be used in order to have this functionality since it does not normally -exist in distutils. - -This hook also ensures that data files are installed relative to the package -path. data_files shouldn't normally be installed this way, but the -functionality is required for a few special cases. - - -Commands --------- -build_optional_ext -'''''''''''''''''' -This serves as an optional replacement for the default built_ext command, -which compiles C extension modules. Its purpose is to allow extension modules -to be *optional*, so that if their build fails the rest of the package is -still allowed to be built and installed. This can be used when an extension -module is not definitely required to use the package. - -To use this custom command, add:: - - commands = stsci.distutils.command.build_optional_ext.build_optional_ext - -under the ``[global]`` section of your package's setup.cfg. Then, to mark -an individual extension module as optional, under the setup.cfg section for -that extension add:: - - optional = True - -Optionally, you may also add a custom failure message by adding:: - - fail_message = The foobar extension module failed to compile. - This could be because you lack such and such headers. - This package will still work, but such and such features - will be disabled. - - -.. _stsci_python: http://www.stsci.edu/resources/software_hardware/pyraf/stsci_python -.. _Astrolib: http://www.scipy.org/AstroLib/ -.. _distutils2/packaging: http://distutils2.notmyidea.org/ -.. _d2to1: http://pypi.python.org/pypi/d2to1 -.. _distribute: http://pypi.python.org/pypi/distribute diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/setup.cfg d2to1-0.2.11/d2to1/tests/testpackage/setup.cfg --- d2to1-0.2.10/d2to1/tests/testpackage/setup.cfg 2013-03-11 12:27:48.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/setup.cfg 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -[metadata] -name = d2to1_testpackage -version = 0.1.dev -author = Erik M. Bray -author-email = embray@stsci.edu -home-page = http://www.stsci.edu/resources/software_hardware/stsci_python -summary = Test package for testing d2to1 -description-file = - README.txt - CHANGES.txt -requires-python = >=2.5 - -requires-dist = - setuptools - -classifier = - Development Status :: 3 - Alpha - Intended Audience :: Developers - License :: OSI Approved :: BSD License - Programming Language :: Python - Topic :: Scientific/Engineering - Topic :: Software Development :: Build Tools - Topic :: Software Development :: Libraries :: Python Modules - Topic :: System :: Archiving :: Packaging - -keywords = packaging, distutils, setuptools - -[files] -packages = d2to1_testpackage -package-data = testpackage = package_data/*.txt -data-files = testpackage/data_files = data_files/*.txt -extra-files = extra-file.txt - -[extension=d2to1_testpackage.testext] -sources = src/testext.c -optional = True - -[global] -#setup-hooks = -# d2to1_testpackage._setup_hooks.test_hook_1 -# d2to1_testpackage._setup_hooks.test_hook_2 -commands = d2to1_testpackage._setup_hooks.test_command - -[build_ext] -#pre-hook.test_pre_hook = d2to1_testpackage._setup_hooks.test_pre_hook -#post-hook.test_post_hook = d2to1_testpackage._setup_hooks.test_post_hook diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/setup.py d2to1-0.2.11/d2to1/tests/testpackage/setup.py --- d2to1-0.2.10/d2to1/tests/testpackage/setup.py 2013-03-11 12:27:48.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/setup.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -#!/usr/bin/env python -try: - from setuptools import setup -except ImportError: - from distribute_setup import use_setuptools - use_setuptools() - from setuptools import setup - -setup( - setup_requires=['d2to1'], - d2to1=True, -) diff -Nru d2to1-0.2.10/d2to1/tests/testpackage/src/testext.c d2to1-0.2.11/d2to1/tests/testpackage/src/testext.c --- d2to1-0.2.10/d2to1/tests/testpackage/src/testext.c 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/testpackage/src/testext.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -#include - - -static PyMethodDef TestextMethods[] = { - {NULL, NULL, 0, NULL} -}; - - -#if PY_MAJOR_VERSION >=3 -static struct PyModuleDef testextmodule = { - PyModuleDef_HEAD_INIT, - "testext", - -1, - TestextMethods -}; - -PyObject* -PyInit_testext(void) -{ - return PyModule_Create(&testextmodule); -} -#else -PyMODINIT_FUNC -inittestext(void) -{ - Py_InitModule("testext", TestextMethods); -} -#endif diff -Nru d2to1-0.2.10/d2to1/tests/util.py d2to1-0.2.11/d2to1/tests/util.py --- d2to1-0.2.10/d2to1/tests/util.py 2013-03-05 19:08:47.000000000 +0000 +++ d2to1-0.2.11/d2to1/tests/util.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -from __future__ import with_statement - -import contextlib -import os -import shutil -import stat - - -from ..extern.six import moves as m -ConfigParser = m.configparser.ConfigParser - - -@contextlib.contextmanager -def open_config(filename): - cfg = ConfigParser() - cfg.read(filename) - yield cfg - with open(filename, 'w') as fp: - cfg.write(fp) - - -def rmtree(path): - """ - shutil.rmtree() with error handler for 'access denied' from trying to - delete read-only files. - """ - - def onerror(func, path, exc_info): - if not os.access(path, os.W_OK): - os.chmod(path, stat.S_IWUSR) - func(path) - else: - raise - - return shutil.rmtree(path, onerror=onerror) diff -Nru d2to1-0.2.10/d2to1/util.py d2to1-0.2.11/d2to1/util.py --- d2to1-0.2.10/d2to1/util.py 2013-04-10 15:11:43.000000000 +0000 +++ d2to1-0.2.11/d2to1/util.py 2013-08-29 20:18:48.000000000 +0000 @@ -311,7 +311,7 @@ if arg == 'data_files': # the data_files value is a pointlessly different structure # from the package_data value - data_files = data_files.items() + data_files = list(data_files.items()) in_cfg_value = data_files elif arg == 'cmdclass': cmdclass = {} diff -Nru d2to1-0.2.10/d2to1/zestreleaser.py d2to1-0.2.11/d2to1/zestreleaser.py --- d2to1-0.2.10/d2to1/zestreleaser.py 2013-03-05 19:08:47.000000000 +0000 +++ d2to1-0.2.11/d2to1/zestreleaser.py 2013-08-29 20:18:48.000000000 +0000 @@ -18,6 +18,7 @@ import logging import os +from .extern.six import print_ from .extern.six import moves as m ConfigParser = m.configparser.ConfigParser @@ -25,6 +26,7 @@ logger = logging.getLogger(__name__) + def update_setupcfg_version(filename, version): """Opens the given setup.cfg file, locates the version option in the [metadata] section, updates it to the new version. @@ -66,6 +68,93 @@ update_setupcfg_version(filename, data['new_version']) +def releaser_middle(data): + """ + releaser.middle hook to monkey-patch zest.releaser to support signed + tagging--currently this is the only way to do this. Also monkey-patches to + disable an annoyance where zest.releaser only creates .zip source + distributions. This is supposedly a workaround for a bug in Python 2.4, + but we don't care about Python 2.4. + """ + + import os + import sys + + from zest.releaser.git import Git + from zest.releaser.release import Releaser + + # Copied verbatim from zest.releaser, but with the cmd string modified to + # use the -s option to create a signed tag + def _my_create_tag(self, version): + msg = "Tagging %s" % (version,) + cmd = 'git tag -s %s -m "%s"' % (version, msg) + if os.path.isdir('.git/svn'): + print_("\nEXPERIMENTAL support for git-svn tagging!\n") + cur_branch = open('.git/HEAD').read().strip().split('/')[-1] + print_("You are on branch %s." % (cur_branch,)) + if cur_branch != 'master': + print_("Only the master branch is supported for git-svn " + "tagging.") + print_("Please tag yourself.") + print_("'git tag' needs to list tag named %s." % (version,)) + sys.exit() + cmd = [cmd] + local_head = open('.git/refs/heads/master').read() + trunk = open('.git/refs/remotes/trunk').read() + if local_head != trunk: + print_("Your local master diverges from trunk.\n") + # dcommit before local tagging + cmd.insert(0, 'git svn dcommit') + # create tag in svn + cmd.append('git svn tag -m "%s" %s' % (msg, version)) + return cmd + + # Similarly copied from zer.releaser to support use of 'v' in front + # of the version number + def _my_make_tag(self): + from zest.releaser import utils + from os import system + + if self.data['tag_already_exists']: + return + cmds = self.vcs.cmd_create_tag(self.data['version']) + if not isinstance(cmds, list): + cmds = [cmds] + if len(cmds) == 1: + print_("Tag needed to proceed, you can use the following command:") + for cmd in cmds: + print_(cmd) + if utils.ask("Run this command"): + print_(system(cmd)) + else: + # all commands are needed in order to proceed normally + print_("Please create a tag for %s yourself and rerun." % \ + (self.data['version'],)) + sys.exit() + if not self.vcs.tag_exists('v' + self.data['version']): + print_("\nFailed to create tag %s!" % (self.data['version'],)) + sys.exit() + + # Normally all this does is to return '--formats=zip', which is currently + # hard-coded as an option to always add to the sdist command; they ought to + # make this actually optional + def _my_sdist_options(self): + return '' + + Git.cmd_create_tag = _my_create_tag + Releaser._make_tag = _my_make_tag + Releaser._sdist_options = _my_sdist_options + + +def postreleaser_before(data): + """ + Fix the irritating .dev0 default appended to new development versions by + zest.releaser to just append ".dev" without the "0". + """ + + data['dev_version_template'] = '%(new_version)s.dev' + + def postreleaser_middle(data): filename = os.path.join(data['workingdir'], 'setup.cfg') if os.path.exists(filename): diff -Nru d2to1-0.2.10/d2to1.egg-info/PKG-INFO d2to1-0.2.11/d2to1.egg-info/PKG-INFO --- d2to1-0.2.10/d2to1.egg-info/PKG-INFO 2013-04-10 15:26:52.000000000 +0000 +++ d2to1-0.2.11/d2to1.egg-info/PKG-INFO 2013-08-29 20:18:54.000000000 +0000 @@ -1,8 +1,7 @@ Metadata-Version: 1.1 Name: d2to1 -Version: 0.2.10 -Summary: Allows using distutils2-like setup.cfg files for a package's metadata -with a distribute/setuptools setup.py +Version: 0.2.11 +Summary: Allows using distutils2-like setup.cfg files for a package's metadata with a distribute/setuptools setup.py Home-page: http://pypi.python.org/pypi/d2to1 Author: Erik M. Bray Author-email: embray@stsci.edu @@ -122,10 +121,23 @@ ========= + 0.2.11 (2013-08-29) + ------------------- + + - Replaced ``distribute_setup.py`` with ``ez_setup.py`` in order to bootstrap + with modern setuptools when necessary. + + - Fixed a couple minor Python 3-specific issues. In particular the + ``data_files`` option could be passed to ``setup()`` as a ``dict_items`` + object instead of a ``list`` which is what would normally be expected. + + - Added a tox.ini (frankly I thought there already was one). + + 0.2.10 (2013-04-10) ------------------- - - Added support for the ``seutp-requires-dist`` option in the ``[metadata]`` + - Added support for the ``setup-requires-dist`` option in the ``[metadata]`` section of setup.cfg. This is analogous to the Setup-Requires-Dist metadata field supported by PEP-426 and uses the ``setup_requires`` argument to setuptools' ``setup()`` to implement it. diff -Nru d2to1-0.2.10/d2to1.egg-info/SOURCES.txt d2to1-0.2.11/d2to1.egg-info/SOURCES.txt --- d2to1-0.2.10/d2to1.egg-info/SOURCES.txt 2013-04-10 15:26:53.000000000 +0000 +++ d2to1-0.2.11/d2to1.egg-info/SOURCES.txt 2013-08-29 20:18:54.000000000 +0000 @@ -1,11 +1,7 @@ -.authors -.gitignore -.travis.yml CHANGES.rst -CONTRIBUTORS LICENSE README.rst -distribute_setup.py +ez_setup.py setup.cfg setup.py d2to1/__init__.py @@ -20,25 +16,4 @@ d2to1.egg-info/requires.txt d2to1.egg-info/top_level.txt d2to1/extern/__init__.py -d2to1/extern/six.py -d2to1/tests/__init__.py -d2to1/tests/test_commands.py -d2to1/tests/test_core.py -d2to1/tests/test_hooks.py -d2to1/tests/util.py -d2to1/tests/testpackage/CHANGES.txt -d2to1/tests/testpackage/LICENSE.txt -d2to1/tests/testpackage/MANIFEST.in -d2to1/tests/testpackage/README.txt -d2to1/tests/testpackage/distribute_setup.py -d2to1/tests/testpackage/extra-file.txt -d2to1/tests/testpackage/setup.cfg -d2to1/tests/testpackage/setup.py -d2to1/tests/testpackage/d2to1_testpackage/__init__.py -d2to1/tests/testpackage/d2to1_testpackage/_setup_hooks.py -d2to1/tests/testpackage/d2to1_testpackage/package_data/1.txt -d2to1/tests/testpackage/d2to1_testpackage/package_data/2.txt -d2to1/tests/testpackage/data_files/a.txt -d2to1/tests/testpackage/data_files/b.txt -d2to1/tests/testpackage/data_files/c.rst -d2to1/tests/testpackage/src/testext.c \ No newline at end of file +d2to1/extern/six.py \ No newline at end of file diff -Nru d2to1-0.2.10/debian/changelog d2to1-0.2.11/debian/changelog --- d2to1-0.2.10/debian/changelog 2013-05-18 02:51:50.000000000 +0000 +++ d2to1-0.2.11/debian/changelog 2014-02-24 05:44:33.000000000 +0000 @@ -1,8 +1,31 @@ -d2to1 (0.2.10-1metacloud1) precise; urgency=low +d2to1 (0.2.11-1build1~cloud0) precise-icehouse; urgency=low + + * New update for the Ubuntu Cloud Archive. + + -- Openstack Ubuntu Testing Bot Mon, 24 Feb 2014 00:44:33 -0500 + +d2to1 (0.2.11-1build1) trusty; urgency=medium + + * Rebuild to drop files installed into /usr/share/pyshared. + + -- Matthias Klose Sun, 23 Feb 2014 13:46:44 +0000 + +d2to1 (0.2.11-1) unstable; urgency=low * New upstream release. - -- Rafi Khardalian Sat, 18 May 2013 02:51:29 +0000 + -- Thomas Goirand Wed, 11 Sep 2013 09:24:08 +0000 + +d2to1 (0.2.10-1) unstable; urgency=low + + [ Aurelien Jarno ] + * New upstream version. + * Bump Standards-Version to 3.9.4 (no changes). + + [ Jakub Wilk ] + * Use canonical URIs for Vcs-* fields. + + -- Aurelien Jarno Thu, 09 May 2013 06:17:15 +0200 d2to1 (0.2.7-1) unstable; urgency=low diff -Nru d2to1-0.2.10/debian/control d2to1-0.2.11/debian/control --- d2to1-0.2.10/debian/control 2012-06-03 22:31:22.000000000 +0000 +++ d2to1-0.2.11/debian/control 2013-09-11 09:21:26.000000000 +0000 @@ -6,10 +6,10 @@ Build-Depends: debhelper (>= 7.0.50~), python-all (>= 2.6.6-3~), python-setuptools, python3-all (>= 3.1.2-6~), python3-setuptools X-Python-Version: >= 2.5 X-Python3-Version: >= 3.0 -Standards-Version: 3.9.3 +Standards-Version: 3.9.4 Homepage: http://pypi.python.org/pypi/d2to1 -Vcs-Svn: svn://svn.debian.org/python-modules/packages/d2to1/trunk/ -Vcs-Browser: http://svn.debian.org/viewsvn/python-modules/packages/d2to1/trunk/ +Vcs-Svn: svn://anonscm.debian.org/python-modules/packages/d2to1/trunk/ +Vcs-Browser: http://anonscm.debian.org/viewvc/python-modules/packages/d2to1/trunk/ Package: python-d2to1 Architecture: all diff -Nru d2to1-0.2.10/distribute_setup.py d2to1-0.2.11/distribute_setup.py --- d2to1-0.2.10/distribute_setup.py 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/distribute_setup.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,515 +0,0 @@ -#!python -"""Bootstrap distribute installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from distribute_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import os -import sys -import time -import fnmatch -import tempfile -import tarfile -from distutils import log - -try: - from site import USER_SITE -except ImportError: - USER_SITE = None - -try: - import subprocess - - def _python_cmd(*args): - args = (sys.executable,) + args - return subprocess.call(args) == 0 - -except ImportError: - # will be used for python 2.3 - def _python_cmd(*args): - args = (sys.executable,) + args - # quoting arguments if windows - if sys.platform == 'win32': - def quote(arg): - if ' ' in arg: - return '"%s"' % arg - return arg - args = [quote(arg) for arg in args] - return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 - -DEFAULT_VERSION = "0.6.28" -DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" -SETUPTOOLS_FAKED_VERSION = "0.6c11" - -SETUPTOOLS_PKG_INFO = """\ -Metadata-Version: 1.0 -Name: setuptools -Version: %s -Summary: xxxx -Home-page: xxx -Author: xxx -Author-email: xxx -License: xxx -Description: xxx -""" % SETUPTOOLS_FAKED_VERSION - - -def _install(tarball, install_args=()): - # extracting the tarball - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - tar = tarfile.open(tarball) - _extractall(tar) - 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 - log.warn('Installing Distribute') - if not _python_cmd('setup.py', 'install', *install_args): - log.warn('Something went wrong during the installation.') - log.warn('See the error message above.') - finally: - os.chdir(old_wd) - - -def _build_egg(egg, tarball, to_dir): - # extracting the tarball - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - tar = tarfile.open(tarball) - _extractall(tar) - 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) - - # building an egg - log.warn('Building a Distribute egg in %s', to_dir) - _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) - - finally: - os.chdir(old_wd) - # returning the result - log.warn(egg) - if not os.path.exists(egg): - raise IOError('Could not build the egg.') - - -def _do_download(version, download_base, to_dir, download_delay): - egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg' - % (version, sys.version_info[0], sys.version_info[1])) - if not os.path.exists(egg): - tarball = download_setuptools(version, download_base, - to_dir, download_delay) - _build_egg(egg, tarball, to_dir) - sys.path.insert(0, egg) - import setuptools - setuptools.bootstrap_install_from = egg - - -def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, download_delay=15, no_fake=True): - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - was_imported = 'pkg_resources' in sys.modules or \ - 'setuptools' in sys.modules - try: - try: - import pkg_resources - if not hasattr(pkg_resources, '_distribute'): - if not no_fake: - _fake_setuptools() - raise ImportError - except ImportError: - return _do_download(version, download_base, to_dir, download_delay) - try: - pkg_resources.require("distribute>=" + version) - return - except pkg_resources.VersionConflict: - e = sys.exc_info()[1] - if was_imported: - sys.stderr.write( - "The required version of distribute (>=%s) is not available,\n" - "and can't be installed while this script is running. Please\n" - "install a more recent version first, using\n" - "'easy_install -U distribute'." - "\n\n(Currently using %r)\n" % (version, e.args[0])) - sys.exit(2) - else: - del pkg_resources, sys.modules['pkg_resources'] # reload ok - return _do_download(version, download_base, to_dir, - download_delay) - except pkg_resources.DistributionNotFound: - return _do_download(version, download_base, to_dir, - download_delay) - finally: - if not no_fake: - _create_fake_setuptools_pkg_info(to_dir) - - -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 - - `version` should be a valid distribute 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 the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download - attempt. - """ - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - try: - from urllib.request import urlopen - except ImportError: - from urllib2 import urlopen - 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: - log.warn("Downloading %s", url) - src = 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) - finally: - if src: - src.close() - if dst: - dst.close() - return os.path.realpath(saveto) - - -def _no_sandbox(function): - def __no_sandbox(*args, **kw): - try: - from setuptools.sandbox import DirectorySandbox - if not hasattr(DirectorySandbox, '_old'): - def violation(*args): - pass - DirectorySandbox._old = DirectorySandbox._violation - DirectorySandbox._violation = violation - patched = True - else: - patched = False - except ImportError: - patched = False - - try: - return function(*args, **kw) - finally: - if patched: - DirectorySandbox._violation = DirectorySandbox._old - del DirectorySandbox._old - - return __no_sandbox - - -def _patch_file(path, content): - """Will backup the file then patch it""" - existing_content = open(path).read() - if existing_content == content: - # already patched - log.warn('Already patched.') - return False - log.warn('Patching...') - _rename_path(path) - f = open(path, 'w') - try: - f.write(content) - finally: - f.close() - return True - -_patch_file = _no_sandbox(_patch_file) - - -def _same_content(path, content): - return open(path).read() == content - - -def _rename_path(path): - new_name = path + '.OLD.%s' % time.time() - log.warn('Renaming %s into %s', path, new_name) - os.rename(path, new_name) - return new_name - - -def _remove_flat_installation(placeholder): - if not os.path.isdir(placeholder): - log.warn('Unkown installation at %s', placeholder) - return False - found = False - for file in os.listdir(placeholder): - if fnmatch.fnmatch(file, 'setuptools*.egg-info'): - found = True - break - if not found: - log.warn('Could not locate setuptools*.egg-info') - return - - log.warn('Removing elements out of the way...') - pkg_info = os.path.join(placeholder, file) - if os.path.isdir(pkg_info): - patched = _patch_egg_dir(pkg_info) - else: - patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO) - - if not patched: - log.warn('%s already patched.', pkg_info) - return False - # now let's move the files out of the way - for element in ('setuptools', 'pkg_resources.py', 'site.py'): - element = os.path.join(placeholder, element) - if os.path.exists(element): - _rename_path(element) - else: - log.warn('Could not find the %s element of the ' - 'Setuptools distribution', element) - return True - -_remove_flat_installation = _no_sandbox(_remove_flat_installation) - - -def _after_install(dist): - log.warn('After install bootstrap.') - placeholder = dist.get_command_obj('install').install_purelib - _create_fake_setuptools_pkg_info(placeholder) - - -def _create_fake_setuptools_pkg_info(placeholder): - if not placeholder or not os.path.exists(placeholder): - log.warn('Could not find the install location') - return - pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1]) - setuptools_file = 'setuptools-%s-py%s.egg-info' % \ - (SETUPTOOLS_FAKED_VERSION, pyver) - pkg_info = os.path.join(placeholder, setuptools_file) - if os.path.exists(pkg_info): - log.warn('%s already exists', pkg_info) - return - - if not os.access(pkg_info, os.W_OK): - log.warn("Don't have permissions to write %s, skipping", pkg_info) - - log.warn('Creating %s', pkg_info) - f = open(pkg_info, 'w') - try: - f.write(SETUPTOOLS_PKG_INFO) - finally: - f.close() - - pth_file = os.path.join(placeholder, 'setuptools.pth') - log.warn('Creating %s', pth_file) - f = open(pth_file, 'w') - try: - f.write(os.path.join(os.curdir, setuptools_file)) - finally: - f.close() - -_create_fake_setuptools_pkg_info = _no_sandbox( - _create_fake_setuptools_pkg_info -) - - -def _patch_egg_dir(path): - # let's check if it's already patched - pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - if os.path.exists(pkg_info): - if _same_content(pkg_info, SETUPTOOLS_PKG_INFO): - log.warn('%s already patched.', pkg_info) - return False - _rename_path(path) - os.mkdir(path) - os.mkdir(os.path.join(path, 'EGG-INFO')) - pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - f = open(pkg_info, 'w') - try: - f.write(SETUPTOOLS_PKG_INFO) - finally: - f.close() - return True - -_patch_egg_dir = _no_sandbox(_patch_egg_dir) - - -def _before_install(): - log.warn('Before install bootstrap.') - _fake_setuptools() - - -def _under_prefix(location): - if 'install' not in sys.argv: - return True - args = sys.argv[sys.argv.index('install') + 1:] - for index, arg in enumerate(args): - for option in ('--root', '--prefix'): - if arg.startswith('%s=' % option): - top_dir = arg.split('root=')[-1] - return location.startswith(top_dir) - elif arg == option: - if len(args) > index: - top_dir = args[index + 1] - return location.startswith(top_dir) - if arg == '--user' and USER_SITE is not None: - return location.startswith(USER_SITE) - return True - - -def _fake_setuptools(): - log.warn('Scanning installed packages') - try: - import pkg_resources - except ImportError: - # we're cool - log.warn('Setuptools or Distribute does not seem to be installed.') - return - ws = pkg_resources.working_set - try: - setuptools_dist = ws.find( - pkg_resources.Requirement.parse('setuptools', replacement=False) - ) - except TypeError: - # old distribute API - setuptools_dist = ws.find( - pkg_resources.Requirement.parse('setuptools') - ) - - if setuptools_dist is None: - log.warn('No setuptools distribution found') - return - # detecting if it was already faked - setuptools_location = setuptools_dist.location - log.warn('Setuptools installation detected at %s', setuptools_location) - - # if --root or --preix was provided, and if - # setuptools is not located in them, we don't patch it - if not _under_prefix(setuptools_location): - log.warn('Not patching, --root or --prefix is installing Distribute' - ' in another location') - return - - # let's see if its an egg - if not setuptools_location.endswith('.egg'): - log.warn('Non-egg installation') - res = _remove_flat_installation(setuptools_location) - if not res: - return - else: - log.warn('Egg installation') - pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO') - if (os.path.exists(pkg_info) and - _same_content(pkg_info, SETUPTOOLS_PKG_INFO)): - log.warn('Already patched.') - return - log.warn('Patching...') - # let's create a fake egg replacing setuptools one - res = _patch_egg_dir(setuptools_location) - if not res: - return - log.warn('Patched done.') - _relaunch() - - -def _relaunch(): - log.warn('Relaunching...') - # we have to relaunch the process - # pip marker to avoid a relaunch bug - _cmd = ['-c', 'install', '--single-version-externally-managed'] - if sys.argv[:3] == _cmd: - sys.argv[0] = 'setup.py' - args = [sys.executable] + sys.argv - sys.exit(subprocess.call(args)) - - -def _extractall(self, path=".", members=None): - """Extract all members from the archive to the current working - directory and set owner, modification time and permissions on - directories afterwards. `path' specifies a different directory - to extract to. `members' is optional and must be a subset of the - list returned by getmembers(). - """ - import copy - import operator - from tarfile import ExtractError - directories = [] - - if members is None: - members = self - - for tarinfo in members: - if tarinfo.isdir(): - # Extract directories with a safe mode. - directories.append(tarinfo) - tarinfo = copy.copy(tarinfo) - tarinfo.mode = 448 # decimal for oct 0700 - self.extract(tarinfo, path) - - # Reverse sort directories. - if sys.version_info < (2, 4): - def sorter(dir1, dir2): - return cmp(dir1.name, dir2.name) - directories.sort(sorter) - directories.reverse() - else: - directories.sort(key=operator.attrgetter('name'), reverse=True) - - # Set correct owner, mtime and filemode on directories. - for tarinfo in directories: - dirpath = os.path.join(path, tarinfo.name) - try: - self.chown(tarinfo, dirpath) - self.utime(tarinfo, dirpath) - self.chmod(tarinfo, dirpath) - except ExtractError: - e = sys.exc_info()[1] - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) - - -def _build_install_args(argv): - install_args = [] - user_install = '--user' in argv - if user_install and sys.version_info < (2, 6): - log.warn("--user requires Python 2.6 or later") - raise SystemExit(1) - if user_install: - install_args.append('--user') - return install_args - - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - tarball = download_setuptools() - _install(tarball, _build_install_args(argv)) - - -if __name__ == '__main__': - main(sys.argv[1:]) diff -Nru d2to1-0.2.10/ez_setup.py d2to1-0.2.11/ez_setup.py --- d2to1-0.2.10/ez_setup.py 1970-01-01 00:00:00.000000000 +0000 +++ d2to1-0.2.11/ez_setup.py 2013-08-29 20:18:48.000000000 +0000 @@ -0,0 +1,264 @@ +#!python +"""Bootstrap setuptools installation + +If you want to use setuptools in your package's setup.py, just include this +file in the same directory with it, and add this to the top of your setup.py:: + + from ez_setup import use_setuptools + use_setuptools() + +If you want to require a specific version of setuptools, set a download +mirror, or use an alternate download directory, you can do so by supplying +the appropriate options to ``use_setuptools()``. + +This file can also be run as a script to install or upgrade setuptools. +""" +import os +import shutil +import sys +import tempfile +import tarfile +import optparse +import subprocess + +from distutils import log + +try: + from site import USER_SITE +except ImportError: + USER_SITE = None + +DEFAULT_VERSION = "0.9.8" +DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" + +def _python_cmd(*args): + args = (sys.executable,) + args + return subprocess.call(args) == 0 + +def _install(tarball, install_args=()): + # extracting the tarball + tmpdir = tempfile.mkdtemp() + log.warn('Extracting in %s', tmpdir) + old_wd = os.getcwd() + try: + os.chdir(tmpdir) + tar = tarfile.open(tarball) + _extractall(tar) + 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 + log.warn('Installing Setuptools') + if not _python_cmd('setup.py', 'install', *install_args): + log.warn('Something went wrong during the installation.') + log.warn('See the error message above.') + # exitcode will be 2 + return 2 + finally: + os.chdir(old_wd) + shutil.rmtree(tmpdir) + + +def _build_egg(egg, tarball, to_dir): + # extracting the tarball + tmpdir = tempfile.mkdtemp() + log.warn('Extracting in %s', tmpdir) + old_wd = os.getcwd() + try: + os.chdir(tmpdir) + tar = tarfile.open(tarball) + _extractall(tar) + 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) + + # building an egg + log.warn('Building a Setuptools egg in %s', to_dir) + _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) + + finally: + os.chdir(old_wd) + shutil.rmtree(tmpdir) + # returning the result + log.warn(egg) + if not os.path.exists(egg): + raise IOError('Could not build the egg.') + + +def _do_download(version, download_base, to_dir, download_delay): + egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' + % (version, sys.version_info[0], sys.version_info[1])) + if not os.path.exists(egg): + tarball = download_setuptools(version, download_base, + to_dir, download_delay) + _build_egg(egg, tarball, to_dir) + sys.path.insert(0, egg) + + # Remove previously-imported pkg_resources if present (see + # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). + if 'pkg_resources' in sys.modules: + del sys.modules['pkg_resources'] + + import setuptools + setuptools.bootstrap_install_from = egg + + +def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=os.curdir, download_delay=15): + # making sure we use the absolute path + to_dir = os.path.abspath(to_dir) + was_imported = 'pkg_resources' in sys.modules or \ + 'setuptools' in sys.modules + try: + import pkg_resources + except ImportError: + return _do_download(version, download_base, to_dir, download_delay) + try: + pkg_resources.require("setuptools>=" + version) + return + except pkg_resources.VersionConflict: + e = sys.exc_info()[1] + if was_imported: + sys.stderr.write( + "The required version of setuptools (>=%s) is not available,\n" + "and can't be installed while this script is running. Please\n" + "install a more recent version first, using\n" + "'easy_install -U setuptools'." + "\n\n(Currently using %r)\n" % (version, e.args[0])) + sys.exit(2) + else: + del pkg_resources, sys.modules['pkg_resources'] # reload ok + return _do_download(version, download_base, to_dir, + download_delay) + except pkg_resources.DistributionNotFound: + return _do_download(version, download_base, to_dir, + download_delay) + + +def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=os.curdir, delay=15): + """Download setuptools from a specified location and return its filename + + `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 the egg will be downloaded. + `delay` is the number of seconds to pause before an actual download + attempt. + """ + # making sure we use the absolute path + to_dir = os.path.abspath(to_dir) + try: + from urllib.request import urlopen + except ImportError: + from urllib2 import urlopen + tgz_name = "setuptools-%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: + log.warn("Downloading %s", url) + src = 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) + finally: + if src: + src.close() + if dst: + dst.close() + return os.path.realpath(saveto) + + +def _extractall(self, path=".", members=None): + """Extract all members from the archive to the current working + directory and set owner, modification time and permissions on + directories afterwards. `path' specifies a different directory + to extract to. `members' is optional and must be a subset of the + list returned by getmembers(). + """ + import copy + import operator + from tarfile import ExtractError + directories = [] + + if members is None: + members = self + + for tarinfo in members: + if tarinfo.isdir(): + # Extract directories with a safe mode. + directories.append(tarinfo) + tarinfo = copy.copy(tarinfo) + tarinfo.mode = 448 # decimal for oct 0700 + self.extract(tarinfo, path) + + # Reverse sort directories. + if sys.version_info < (2, 4): + def sorter(dir1, dir2): + return cmp(dir1.name, dir2.name) + directories.sort(sorter) + directories.reverse() + else: + directories.sort(key=operator.attrgetter('name'), reverse=True) + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError: + e = sys.exc_info()[1] + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + +def _build_install_args(options): + """ + Build the arguments to 'python setup.py install' on the setuptools package + """ + install_args = [] + if options.user_install: + if sys.version_info < (2, 6): + log.warn("--user requires Python 2.6 or later") + raise SystemExit(1) + install_args.append('--user') + return install_args + +def _parse_args(): + """ + Parse the command line for options + """ + parser = optparse.OptionParser() + parser.add_option( + '--user', dest='user_install', action='store_true', default=False, + help='install in user site package (requires Python 2.6 or later)') + parser.add_option( + '--download-base', dest='download_base', metavar="URL", + default=DEFAULT_URL, + help='alternative URL from where to download the setuptools package') + options, args = parser.parse_args() + # positional arguments are ignored + return options + +def main(version=DEFAULT_VERSION): + """Install or upgrade setuptools and EasyInstall""" + options = _parse_args() + tarball = download_setuptools(download_base=options.download_base) + return _install(tarball, _build_install_args(options)) + +if __name__ == '__main__': + sys.exit(main()) diff -Nru d2to1-0.2.10/.gitignore d2to1-0.2.11/.gitignore --- d2to1-0.2.10/.gitignore 2013-02-25 20:25:37.000000000 +0000 +++ d2to1-0.2.11/.gitignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -# Compiled files -*.py[co] -*.a -*.o -*.so - -# Sphinx -_build - -# Packages/installer info -*.egg -*.egg-info -dist -build -eggs -parts -bin -var -sdist -develop-eggs -.installed.cfg - -# Other -.tox -.*.swp -.coverage -cover diff -Nru d2to1-0.2.10/PKG-INFO d2to1-0.2.11/PKG-INFO --- d2to1-0.2.10/PKG-INFO 2013-04-10 15:26:53.000000000 +0000 +++ d2to1-0.2.11/PKG-INFO 2013-08-29 20:18:56.000000000 +0000 @@ -1,8 +1,7 @@ Metadata-Version: 1.1 Name: d2to1 -Version: 0.2.10 -Summary: Allows using distutils2-like setup.cfg files for a package's metadata -with a distribute/setuptools setup.py +Version: 0.2.11 +Summary: Allows using distutils2-like setup.cfg files for a package's metadata with a distribute/setuptools setup.py Home-page: http://pypi.python.org/pypi/d2to1 Author: Erik M. Bray Author-email: embray@stsci.edu @@ -122,10 +121,23 @@ ========= + 0.2.11 (2013-08-29) + ------------------- + + - Replaced ``distribute_setup.py`` with ``ez_setup.py`` in order to bootstrap + with modern setuptools when necessary. + + - Fixed a couple minor Python 3-specific issues. In particular the + ``data_files`` option could be passed to ``setup()`` as a ``dict_items`` + object instead of a ``list`` which is what would normally be expected. + + - Added a tox.ini (frankly I thought there already was one). + + 0.2.10 (2013-04-10) ------------------- - - Added support for the ``seutp-requires-dist`` option in the ``[metadata]`` + - Added support for the ``setup-requires-dist`` option in the ``[metadata]`` section of setup.cfg. This is analogous to the Setup-Requires-Dist metadata field supported by PEP-426 and uses the ``setup_requires`` argument to setuptools' ``setup()`` to implement it. diff -Nru d2to1-0.2.10/setup.cfg d2to1-0.2.11/setup.cfg --- d2to1-0.2.10/setup.cfg 2013-04-10 15:26:53.000000000 +0000 +++ d2to1-0.2.11/setup.cfg 2013-08-29 20:18:56.000000000 +0000 @@ -1,10 +1,9 @@ [metadata] name = d2to1 -version = 0.2.10 +version = 0.2.11 author = Erik M. Bray author-email = embray@stsci.edu -summary = Allows using distutils2-like setup.cfg files for a package's metadata - with a distribute/setuptools setup.py +summary = Allows using distutils2-like setup.cfg files for a package's metadata with a distribute/setuptools setup.py description-file = README.rst CHANGES.rst @@ -30,7 +29,7 @@ extra_files = CHANGES.rst LICENSE - distribute_setup.py + ez_setup.py [backwards_compat] zip-safe = False @@ -47,6 +46,10 @@ [test] test-suite = nose.collector +[zest.releaser] +releaser.middle = d2to1.zestreleaser.releaser_middle +postreleaser.before = d2to1.zestreleaser.postreleaser_before + [egg_info] tag_build = tag_date = 0 diff -Nru d2to1-0.2.10/setup.py d2to1-0.2.11/setup.py --- d2to1-0.2.10/setup.py 2013-04-10 15:25:03.000000000 +0000 +++ d2to1-0.2.11/setup.py 2013-08-29 20:18:48.000000000 +0000 @@ -2,7 +2,7 @@ try: from setuptools import setup except ImportError: - from distribute_setup import use_setuptools + from ez_setup import use_setuptools use_setuptools() from setuptools import setup diff -Nru d2to1-0.2.10/.travis.yml d2to1-0.2.11/.travis.yml --- d2to1-0.2.10/.travis.yml 2013-03-05 15:00:24.000000000 +0000 +++ d2to1-0.2.11/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -language: python -python: - - "3.3" - - "3.2" - - "2.7" - - "2.6" - - "2.5" -script: python setup.py test