|
| 1 | +"""Tests for distutils.command.sdist.""" |
| 2 | +import os |
| 3 | +import unittest |
| 4 | +import shutil |
| 5 | +import zipfile |
| 6 | +from os.path import join |
| 7 | + |
| 8 | +from distutils.command.sdist import sdist |
| 9 | +from distutils.core import Distribution |
| 10 | +from distutils.tests.test_config import PyPIRCCommandTestCase |
| 11 | + |
| 12 | +CURDIR = os.path.dirname(__file__) |
| 13 | +TEMP_PKG = join(CURDIR, 'temppkg') |
| 14 | + |
| 15 | +SETUP_PY = """ |
| 16 | +from distutils.core import setup |
| 17 | +import somecode |
| 18 | +
|
| 19 | +setup(name='fake') |
| 20 | +""" |
| 21 | + |
| 22 | +MANIFEST_IN = """ |
| 23 | +recursive-include somecode * |
| 24 | +""" |
| 25 | + |
| 26 | +class sdistTestCase(PyPIRCCommandTestCase): |
| 27 | + |
| 28 | + def setUp(self): |
| 29 | + PyPIRCCommandTestCase.setUp(self) |
| 30 | + self.old_path = os.getcwd() |
| 31 | + |
| 32 | + def tearDown(self): |
| 33 | + os.chdir(self.old_path) |
| 34 | + if os.path.exists(TEMP_PKG): |
| 35 | + shutil.rmtree(TEMP_PKG) |
| 36 | + PyPIRCCommandTestCase.tearDown(self) |
| 37 | + |
| 38 | + def _write(self, path, content): |
| 39 | + f = open(path, 'w') |
| 40 | + try: |
| 41 | + f.write(content) |
| 42 | + finally: |
| 43 | + f.close() |
| 44 | + |
| 45 | + def test_prune_file_list(self): |
| 46 | + # this test creates a package with some vcs dirs in it |
| 47 | + # and launch sdist to make sure they get pruned |
| 48 | + # on all systems |
| 49 | + if not os.path.exists(TEMP_PKG): |
| 50 | + os.mkdir(TEMP_PKG) |
| 51 | + os.mkdir(join(TEMP_PKG, 'somecode')) |
| 52 | + |
| 53 | + # creating a MANIFEST, a package, and a README |
| 54 | + self._write(join(TEMP_PKG, 'MANIFEST.in'), MANIFEST_IN) |
| 55 | + self._write(join(TEMP_PKG, 'README'), 'xxx') |
| 56 | + self._write(join(TEMP_PKG, 'somecode', '__init__.py'), '#') |
| 57 | + self._write(join(TEMP_PKG, 'setup.py'), SETUP_PY) |
| 58 | + |
| 59 | + # creating VCS directories with some files in them |
| 60 | + os.mkdir(join(TEMP_PKG, 'somecode', '.svn')) |
| 61 | + self._write(join(TEMP_PKG, 'somecode', '.svn', 'ok.py'), 'xxx') |
| 62 | + |
| 63 | + os.mkdir(join(TEMP_PKG, 'somecode', '.hg')) |
| 64 | + self._write(join(TEMP_PKG, 'somecode', '.hg', |
| 65 | + 'ok'), 'xxx') |
| 66 | + |
| 67 | + os.mkdir(join(TEMP_PKG, 'somecode', '.git')) |
| 68 | + self._write(join(TEMP_PKG, 'somecode', '.git', |
| 69 | + 'ok'), 'xxx') |
| 70 | + |
| 71 | + os.chdir(TEMP_PKG) |
| 72 | + |
| 73 | + # now building a sdist |
| 74 | + dist = Distribution() |
| 75 | + dist.script_name = 'setup.py' |
| 76 | + dist.metadata.name = 'fake' |
| 77 | + dist.metadata.version = '1.0' |
| 78 | + dist.metadata.url = 'http://xxx' |
| 79 | + dist.metadata.author = dist.metadata.author_email = 'xxx' |
| 80 | + dist.packages = ['somecode'] |
| 81 | + dist.include_package_data = True |
| 82 | + cmd = sdist(dist) |
| 83 | + cmd.manifest = 'MANIFEST' |
| 84 | + cmd.template = 'MANIFEST.in' |
| 85 | + cmd.dist_dir = 'dist' |
| 86 | + |
| 87 | + # zip is available universally |
| 88 | + # (tar might not be installed under win32) |
| 89 | + cmd.formats = ['zip'] |
| 90 | + cmd.run() |
| 91 | + |
| 92 | + # now let's check what we have |
| 93 | + dist_folder = join(TEMP_PKG, 'dist') |
| 94 | + files = os.listdir(dist_folder) |
| 95 | + self.assertEquals(files, ['fake-1.0.zip']) |
| 96 | + |
| 97 | + zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip')) |
| 98 | + try: |
| 99 | + content = zip_file.namelist() |
| 100 | + finally: |
| 101 | + zip_file.close() |
| 102 | + |
| 103 | + # making sure everything has been pruned correctly |
| 104 | + self.assertEquals(len(content), 4) |
| 105 | + |
| 106 | +def test_suite(): |
| 107 | + return unittest.makeSuite(sdistTestCase) |
| 108 | + |
| 109 | +if __name__ == "__main__": |
| 110 | + unittest.main(defaultTest="test_suite") |
0 commit comments