From d86776560411acccca7a10328b47c5667578d645 Mon Sep 17 00:00:00 2001 From: Zooko Date: Sat, 12 May 2012 20:42:52 -0700 Subject: [PATCH] modify build_helpers files Should close #1342. This makes the actual changes to the two test files (separated from the 'rename' patch to avoid VC complications). --- ...n-you-already-have-sufficiently-new-one.py | 3 +- .../test-dont-use-too-old-dep.py | 113 +++++++++++++----- 2 files changed, 87 insertions(+), 29 deletions(-) diff --git a/misc/build_helpers/test-dont-install-newer-dep-when-you-already-have-sufficiently-new-one.py b/misc/build_helpers/test-dont-install-newer-dep-when-you-already-have-sufficiently-new-one.py index 64d84539..83e5de9e 100644 --- a/misc/build_helpers/test-dont-install-newer-dep-when-you-already-have-sufficiently-new-one.py +++ b/misc/build_helpers/test-dont-install-newer-dep-when-you-already-have-sufficiently-new-one.py @@ -12,7 +12,8 @@ def test(): # # python setup.py --fakedependency -v test -s buildtest.test_build_with_fake_dist # - # which imports fakedependency and passes if fakedependency.__version__ == '1.0.0'. + # which requires "fakedependency >= 1.0.0", imports fakedependency + # and passes if fakedependency.__version__ == '1.0.0'. # # The goal is to turn red if the build system tries to build the # source dist when it could have used the binary dist. diff --git a/misc/build_helpers/test-dont-use-too-old-dep.py b/misc/build_helpers/test-dont-use-too-old-dep.py index f3ecf880..4c5e394e 100644 --- a/misc/build_helpers/test-dont-use-too-old-dep.py +++ b/misc/build_helpers/test-dont-use-too-old-dep.py @@ -1,30 +1,87 @@ #!/usr/bin/env python -# We put a fake "pycryptopp-0.5.13" package on the PYTHONPATH so that -# the build system thinks pycryptopp-0.5.13 is already installed. Then -# we execute 'setup.py trial'. If the build system is too naive/greedy -# about finding dependencies, it will latch onto the -# "pycryptopp-0.5.13" and then will be unable to satisfy the -# requirement (from _auto_deps.py) for pycryptopp >= 0.5.20 (or -# pycryptopp >= 0.5.14, depending on machine architecture). This is -# currently happening on trunk, see #1190. So with trunk, running -# test-with-fake-pkg.py shows a failure, but with the ticket1190 -# branch, test-with-fake-pkg.py succeeds. - -import os, subprocess, sys - -fakepkgdir = 'misc/build_helpers/fakepkgs' -fakepkgname = "pycryptopp" -fakepkgversion = "0.5.13" -testsuite = "allmydata.test.test_backupdb" - -pkgdirname = os.path.join(os.getcwd(), fakepkgdir, '%s-%s.egg' % (fakepkgname, fakepkgversion)) - -try: - os.makedirs(pkgdirname) -except OSError: - # probably already exists - pass - -os.environ['PYTHONPATH']=pkgdirname+os.pathsep+os.environ.get('PYTHONPATH','') -sys.exit(subprocess.call([sys.executable, 'setup.py', 'trial', '-s', testsuite], env=os.environ)) +import StringIO, os, platform, shutil, subprocess, sys, tarfile, zipfile +import pkg_resources + +def test(): + # We put a "fakedependency-0.9.9.egg" package and a + # "fakedependency-1.0.0.tar.gz" into a directory, but the former is + # booby-trapped so it will raise an exception when you try to import it. + # + # Then we run + # + # python setup.py --fakedependency -v test -s buildtest.test_build_with_fake_dist + # + # which requires "fakedependency >= 1.0.0", imports fakedependency + # and passes if fakedependency.__version__ == '1.0.0'. + # + # The goal is to turn red if the build system tries to use the + # source dist when it could have used the binary dist. + # + # Note that for this test to make sense, Tahoe-LAFS needs to be asking + # for a version of fakedependency which can be satisfied by 1.0.0. + # The --fakedependency option to setup.py arranges that. + + fake_distdir = 'tahoe-deps' + fake_distname = "fakedependency" + fake_sdistversion = "1.0.0" + fake_bdistversion = "0.9.9" + + bdist_init = "raise Exception('Aha I caught you trying to import me. I am a fakedependency 0.9.9 package and you should not be satisfied with something < 1.0.0.')" + sdist_setup = "import distutils.core\ndistutils.core.setup(name='fakedependency', version='1.0.0', packages=['fakedependency'])" + sdist_init = "__version__ = '%s'" % (fake_sdistversion,) + + testsuite = "buildtest.test_build_with_fake_dist" + + dist_dirname = os.path.join(os.getcwd(), fake_distdir) + + try: + os.makedirs(dist_dirname) + except OSError: + # probably already exists + pass + + bdist_egg_name = os.path.join(dist_dirname, '%s-%s-py%s.%s-%s.egg' % (fake_distname, fake_bdistversion, platform.python_version_tuple()[0], platform.python_version_tuple()[1], pkg_resources.get_supported_platform())) + try: + bdist_egg = zipfile.ZipFile(bdist_egg_name, 'w') + bdist_egg.writestr('fakedependency/__init__.py', bdist_init) + bdist_egg.close() + + sdist_name = os.path.join(dist_dirname, '%s-%s.tar' % (fake_distname, fake_sdistversion)) + sdist = tarfile.open(sdist_name, 'w:gz') + sdist.errorlevel = 2 + tarinfo = tarfile.TarInfo('setup.py') + tarinfo.errorlevel = 2 + tarinfo.size = len(sdist_setup) + sdist.addfile(tarinfo, StringIO.StringIO(sdist_setup)) + tarinfo = tarfile.TarInfo('fakedependency/__init__.py') + tarinfo.errorlevel = 2 + tarinfo.size = len(sdist_init) + sdist.addfile(tarinfo, StringIO.StringIO(sdist_init)) + sdist.close() + + sys.exit(subprocess.call([sys.executable, "setup.py", "--fakedependency", "-v", "test", "-s", testsuite], + env=os.environ)) + finally: + os.remove(bdist_egg_name) + os.remove(sdist_name) + cleanup() + +def cleanup(): + egg_info = os.path.join('src', 'allmydata_tahoe.egg-info') + bin_tahoe = os.path.join('bin', 'tahoe') + bin_tahoe_pyscript = os.path.join('bin', 'tahoe.pyscript') + + if os.path.exists('build'): + shutil.rmtree('build') + if os.path.exists('support'): + shutil.rmtree('support') + if os.path.exists(egg_info): + shutil.rmtree(egg_info) + if os.path.exists(bin_tahoe): + os.remove(bin_tahoe) + if os.path.exists(bin_tahoe_pyscript): + os.remove(bin_tahoe_pyscript) + +if __name__ == '__main__': + test() -- 2.45.2