185d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé"""Tests for distutils.command.sdist.""" 285d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadéimport os 3560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujoimport tarfile 485d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadéimport unittest 5560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujoimport warnings 685d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadéimport zipfile 7560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujofrom os.path import join 8560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujofrom textwrap import dedent 9ae50babe32b53049910d8d0bb8a2eeac7c18a477Éric Araujofrom test.test_support import captured_stdout, check_warnings, run_unittest 101036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti 111036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti# zlib is not used here, but if it's not available 121036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti# the tests that use zipfile may fail 131036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melottitry: 141036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti import zlib 151036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melottiexcept ImportError: 161036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti zlib = None 171036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti 181b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadétry: 191b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé import grp 201b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé import pwd 211b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé UID_GID_SUPPORT = True 221b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadéexcept ImportError: 231b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé UID_GID_SUPPORT = False 241b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé 25064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé 2654274ad96aa033b9f3744dce395d08047467cca9Éric Araujofrom distutils.command.sdist import sdist, show_formats 2785d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadéfrom distutils.core import Distribution 2885d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadéfrom distutils.tests.test_config import PyPIRCCommandTestCase 29560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujofrom distutils.errors import DistutilsOptionError 305da9a51d9d18082665f69351817fcf36e250e835Tarek Ziadéfrom distutils.spawn import find_executable 31cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadéfrom distutils.log import WARN 320f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujofrom distutils.filelist import FileList 33064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadéfrom distutils.archive_util import ARCHIVE_FORMATS 3485d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 3585d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek ZiadéSETUP_PY = """ 3685d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadéfrom distutils.core import setup 3785d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadéimport somecode 3885d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 3985d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadésetup(name='fake') 4085d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé""" 4185d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 427dd533963fc947982e472db555cd0ee4b937c9cfTarek ZiadéMANIFEST = """\ 430389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo# file GENERATED by distutils, do NOT edit 447dd533963fc947982e472db555cd0ee4b937c9cfTarek ZiadéREADME 4531378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujobuildout.cfg 460e5001eff9a44bdabe2d2b25903e144a3dcbc77fTarek Ziadéinroot.txt 477dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadésetup.py 48ae9dc8c48aa0e0db5ce32080d8a28d26e19b7851Tarek Ziadédata%(sep)sdata.dt 49ae9dc8c48aa0e0db5ce32080d8a28d26e19b7851Tarek Ziadéscripts%(sep)sscript.py 50f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadésome%(sep)sfile.txt 51f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadésome%(sep)sother_file.txt 52ae9dc8c48aa0e0db5ce32080d8a28d26e19b7851Tarek Ziadésomecode%(sep)s__init__.py 53ae9dc8c48aa0e0db5ce32080d8a28d26e19b7851Tarek Ziadésomecode%(sep)sdoc.dat 54ae9dc8c48aa0e0db5ce32080d8a28d26e19b7851Tarek Ziadésomecode%(sep)sdoc.txt 5585d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé""" 5685d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 57cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadéclass SDistTestCase(PyPIRCCommandTestCase): 5885d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 5985d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé def setUp(self): 601369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé # PyPIRCCommandTestCase creates a temp dir already 611369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé # and put it in self.tmp_dir 62cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé super(SDistTestCase, self).setUp() 631369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé # setting up an environment 6485d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé self.old_path = os.getcwd() 651369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé os.mkdir(join(self.tmp_dir, 'somecode')) 661369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé os.mkdir(join(self.tmp_dir, 'dist')) 677dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # a package, and a README 687dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((self.tmp_dir, 'README'), 'xxx') 697dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((self.tmp_dir, 'somecode', '__init__.py'), '#') 707dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((self.tmp_dir, 'setup.py'), SETUP_PY) 711369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé os.chdir(self.tmp_dir) 7285d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 7385d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé def tearDown(self): 741369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé # back to normal 7585d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé os.chdir(self.old_path) 76cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé super(SDistTestCase, self).tearDown() 777dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 787dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé def get_cmd(self, metadata=None): 797dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé """Returns a cmd""" 807dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé if metadata is None: 817dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé metadata = {'name': 'fake', 'version': '1.0', 827dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 'url': 'xxx', 'author': 'xxx', 837dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 'author_email': 'xxx'} 847dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist = Distribution(metadata) 857dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist.script_name = 'setup.py' 867dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist.packages = ['somecode'] 877dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist.include_package_data = True 887dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd = sdist(dist) 897dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd.dist_dir = 'dist' 907dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé return dist, cmd 9185d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 921036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti @unittest.skipUnless(zlib, "requires zlib") 9385d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé def test_prune_file_list(self): 943cf202e9578cef4429254641599e8f6be6540309Éric Araujo # this test creates a project with some VCS dirs and an NFS rename 953cf202e9578cef4429254641599e8f6be6540309Éric Araujo # file, then launches sdist to check they get pruned on all systems 9685d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 9785d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé # creating VCS directories with some files in them 981369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé os.mkdir(join(self.tmp_dir, 'somecode', '.svn')) 997dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((self.tmp_dir, 'somecode', '.svn', 'ok.py'), 'xxx') 10085d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 1011369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé os.mkdir(join(self.tmp_dir, 'somecode', '.hg')) 1027dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((self.tmp_dir, 'somecode', '.hg', 10385d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 'ok'), 'xxx') 10485d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 1051369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé os.mkdir(join(self.tmp_dir, 'somecode', '.git')) 1067dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((self.tmp_dir, 'somecode', '.git', 10785d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 'ok'), 'xxx') 10885d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 1093cf202e9578cef4429254641599e8f6be6540309Éric Araujo self.write_file((self.tmp_dir, 'somecode', '.nfs0001'), 'xxx') 1103cf202e9578cef4429254641599e8f6be6540309Éric Araujo 11185d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé # now building a sdist 1127dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist, cmd = self.get_cmd() 11385d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 11485d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé # zip is available universally 11585d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé # (tar might not be installed under win32) 11685d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé cmd.formats = ['zip'] 1177dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 1187dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd.ensure_finalized() 11985d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé cmd.run() 12085d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 12185d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé # now let's check what we have 1221369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé dist_folder = join(self.tmp_dir, 'dist') 12385d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé files = os.listdir(dist_folder) 1242623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(files, ['fake-1.0.zip']) 12585d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 12685d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip')) 12785d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé try: 12885d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé content = zip_file.namelist() 12985d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé finally: 13085d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé zip_file.close() 13185d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 13285d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé # making sure everything has been pruned correctly 1332623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(len(content), 4) 13485d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 1351036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti @unittest.skipUnless(zlib, "requires zlib") 136aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé def test_make_distribution(self): 137aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé # now building a sdist 1387dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist, cmd = self.get_cmd() 139aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé 140aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé # creating a gztar then a tar 141aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé cmd.formats = ['gztar', 'tar'] 1427dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd.ensure_finalized() 143aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé cmd.run() 144aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé 145aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé # making sure we have two files 1461369900619d943d05342e7b781f1f3fb45ece4c9Tarek Ziadé dist_folder = join(self.tmp_dir, 'dist') 147aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé result = os.listdir(dist_folder) 148aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé result.sort() 14931378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz']) 150aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé 151aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé os.remove(join(dist_folder, 'fake-1.0.tar')) 152aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé os.remove(join(dist_folder, 'fake-1.0.tar.gz')) 153aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé 154aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé # now trying a tar then a gztar 155aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé cmd.formats = ['tar', 'gztar'] 1567dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 1577dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd.ensure_finalized() 158aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé cmd.run() 159aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé 160aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé result = os.listdir(dist_folder) 161aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé result.sort() 1622623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz']) 163aaedcef5786f10593b51d389423b5d7ce97727c0Tarek Ziadé 1641036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti @unittest.skipUnless(zlib, "requires zlib") 165042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs def test_unicode_metadata_tgz(self): 166042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs """ 167042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs Unicode name or version should not break building to tar.gz format. 168042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs Reference issue #11638. 169042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs """ 170042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs 171042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs # create the sdist command with unicode parameters 172042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs dist, cmd = self.get_cmd({'name': u'fake', 'version': u'1.0'}) 173042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs 174042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs # create the sdist as gztar and run the command 175042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs cmd.formats = ['gztar'] 176042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs cmd.ensure_finalized() 177042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs cmd.run() 178042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs 179042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs # The command should have created the .tar.gz file 180042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs dist_folder = join(self.tmp_dir, 'dist') 181042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs result = os.listdir(dist_folder) 182042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs self.assertEqual(result, ['fake-1.0.tar.gz']) 183042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs 184042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs os.remove(join(dist_folder, 'fake-1.0.tar.gz')) 185042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs 186042370e7503504b23ed13c56c8599a620569eab6Jason R. Coombs @unittest.skipUnless(zlib, "requires zlib") 1877dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé def test_add_defaults(self): 1887dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 1897dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # http://bugs.python.org/issue2279 1907dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 1917dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # add_default should also include 1927dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # data_files and package_data 1937dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist, cmd = self.get_cmd() 1947dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 1957dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # filling data_files by pointing files 1967dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # in package_data 1977dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist.package_data = {'': ['*.cfg', '*.dat'], 1987dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 'somecode': ['*.txt']} 1997dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#') 2007dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#') 2017dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2027dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # adding some data in data_files 2037dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé data_dir = join(self.tmp_dir, 'data') 2047dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé os.mkdir(data_dir) 2057dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((data_dir, 'data.dt'), '#') 206f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadé some_dir = join(self.tmp_dir, 'some') 207f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadé os.mkdir(some_dir) 20831378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo # make sure VCS directories are pruned (#14004) 20931378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo hg_dir = join(self.tmp_dir, '.hg') 21031378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo os.mkdir(hg_dir) 21131378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo self.write_file((hg_dir, 'last-message.txt'), '#') 21231378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo # a buggy regex used to prevent this from working on windows (#6884) 21331378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo self.write_file((self.tmp_dir, 'buildout.cfg'), '#') 2140e5001eff9a44bdabe2d2b25903e144a3dcbc77fTarek Ziadé self.write_file((self.tmp_dir, 'inroot.txt'), '#') 215f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadé self.write_file((some_dir, 'file.txt'), '#') 216f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadé self.write_file((some_dir, 'other_file.txt'), '#') 217f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadé 2180e5001eff9a44bdabe2d2b25903e144a3dcbc77fTarek Ziadé dist.data_files = [('data', ['data/data.dt', 21931378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo 'buildout.cfg', 2200e5001eff9a44bdabe2d2b25903e144a3dcbc77fTarek Ziadé 'inroot.txt', 2210e5001eff9a44bdabe2d2b25903e144a3dcbc77fTarek Ziadé 'notexisting']), 222f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadé 'some/file.txt', 223f68b5b804675326fb05e20b3f327bd774fa95d09Tarek Ziadé 'some/other_file.txt'] 2247dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2257dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # adding a script 2267dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé script_dir = join(self.tmp_dir, 'scripts') 2277dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé os.mkdir(script_dir) 2287dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé self.write_file((script_dir, 'script.py'), '#') 2297dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist.scripts = [join('scripts', 'script.py')] 2307dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2317dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd.formats = ['zip'] 2327dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd.use_defaults = True 2337dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2347dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd.ensure_finalized() 2357dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé cmd.run() 2367dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2377dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # now let's check what we have 2387dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé dist_folder = join(self.tmp_dir, 'dist') 2397dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé files = os.listdir(dist_folder) 2402623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(files, ['fake-1.0.zip']) 2417dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2427dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip')) 2437dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé try: 2447dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé content = zip_file.namelist() 2457dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé finally: 2467dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé zip_file.close() 2477dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2487dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # making sure everything was added 24931378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo self.assertEqual(len(content), 12) 2507dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2517dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé # checking the MANIFEST 252d1feff70a3c08f91066b99a74ee1ca8f65bdfec1Éric Araujo f = open(join(self.tmp_dir, 'MANIFEST')) 253d1feff70a3c08f91066b99a74ee1ca8f65bdfec1Éric Araujo try: 254d1feff70a3c08f91066b99a74ee1ca8f65bdfec1Éric Araujo manifest = f.read() 255d1feff70a3c08f91066b99a74ee1ca8f65bdfec1Éric Araujo finally: 256d1feff70a3c08f91066b99a74ee1ca8f65bdfec1Éric Araujo f.close() 25731378df83a5562df10b21f3f32d3b3a6cbfa054bÉric Araujo self.assertEqual(manifest, MANIFEST % {'sep': os.sep}) 2587dd533963fc947982e472db555cd0ee4b937c9cfTarek Ziadé 2591036a7f7e180ac3fd98e43832a04e38b4c7c9e83Ezio Melotti @unittest.skipUnless(zlib, "requires zlib") 260cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé def test_metadata_check_option(self): 261cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé # testing the `medata-check` option 262cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé dist, cmd = self.get_cmd(metadata={}) 263cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé 264cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé # this should raise some warnings ! 265cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé # with the `check` subcommand 266cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé cmd.ensure_finalized() 267cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé cmd.run() 268cb18d077c65032f27396eaeef314267ee20375dbÉric Araujo warnings = [msg for msg in self.get_logs(WARN) if 269cb18d077c65032f27396eaeef314267ee20375dbÉric Araujo msg.startswith('warning: check:')] 2702623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(len(warnings), 2) 271cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé 272cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé # trying with a complete set of metadata 273cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé self.clear_logs() 274cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé dist, cmd = self.get_cmd() 275cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé cmd.ensure_finalized() 276cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé cmd.metadata_check = 0 277cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé cmd.run() 278cb18d077c65032f27396eaeef314267ee20375dbÉric Araujo warnings = [msg for msg in self.get_logs(WARN) if 279cb18d077c65032f27396eaeef314267ee20375dbÉric Araujo msg.startswith('warning: check:')] 2802623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(len(warnings), 0) 281cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé 282cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé def test_check_metadata_deprecated(self): 283cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé # makes sure make_metadata is deprecated 284cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé dist, cmd = self.get_cmd() 285cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé with check_warnings() as w: 286cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé warnings.simplefilter("always") 287cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé cmd.check_metadata() 2882623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(len(w.warnings), 1) 289cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé 290064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé def test_show_formats(self): 291064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé with captured_stdout() as stdout: 292064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé show_formats() 293064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé 294064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé # the output should be a header line + one line per format 295064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé num_formats = len(ARCHIVE_FORMATS.keys()) 296064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé output = [line for line in stdout.getvalue().split('\n') 297064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé if line.strip().startswith('--formats=')] 2982623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(len(output), num_formats) 299064a7681011f918f4aaf97f1df3008ffe57dfea9Tarek Ziadé 3008953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé def test_finalize_options(self): 3018953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé dist, cmd = self.get_cmd() 3028953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé cmd.finalize_options() 3038953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé 3048953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé # default options set by finalize 3052623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(cmd.manifest, 'MANIFEST') 3062623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(cmd.template, 'MANIFEST.in') 3072623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(cmd.dist_dir, 'dist') 3088953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé 3098953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé # formats has to be a string splitable on (' ', ',') or 3108953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé # a stringlist 3118953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé cmd.formats = 1 3128953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé self.assertRaises(DistutilsOptionError, cmd.finalize_options) 3138953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé cmd.formats = ['zip'] 3148953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé cmd.finalize_options() 3158953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé 3168953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé # formats has to be known 3178953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé cmd.formats = 'supazipa' 3188953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé self.assertRaises(DistutilsOptionError, cmd.finalize_options) 3198953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé 3201b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé @unittest.skipUnless(zlib, "requires zlib") 3211b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support") 32257bc6da7c4327aa870fbf5292c1b05a9ac3bfe19Serhiy Storchaka @unittest.skipIf(find_executable('tar') is None, 32357bc6da7c4327aa870fbf5292c1b05a9ac3bfe19Serhiy Storchaka "The tar command is not found") 32457bc6da7c4327aa870fbf5292c1b05a9ac3bfe19Serhiy Storchaka @unittest.skipIf(find_executable('gzip') is None, 32557bc6da7c4327aa870fbf5292c1b05a9ac3bfe19Serhiy Storchaka "The gzip command is not found") 3261b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé def test_make_distribution_owner_group(self): 3271b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé # now building a sdist 3281b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé dist, cmd = self.get_cmd() 3291b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé 3301b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé # creating a gztar and specifying the owner+group 3311b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé cmd.formats = ['gztar'] 3321b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé cmd.owner = pwd.getpwuid(0)[0] 3331b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé cmd.group = grp.getgrgid(0)[0] 3341b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé cmd.ensure_finalized() 3351b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé cmd.run() 3361b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé 3371b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé # making sure we have the good rights 3381b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé archive_name = join(self.tmp_dir, 'dist', 'fake-1.0.tar.gz') 3391b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé archive = tarfile.open(archive_name) 3401b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé try: 3411b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé for member in archive.getmembers(): 3422623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(member.uid, 0) 3432623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(member.gid, 0) 3441b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé finally: 3451b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé archive.close() 3461b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé 3471b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé # building a sdist again 3481b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé dist, cmd = self.get_cmd() 3491b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé 3501b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé # creating a gztar 3511b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé cmd.formats = ['gztar'] 3521b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé cmd.ensure_finalized() 3531b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé cmd.run() 3541b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé 3551b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé # making sure we have the good rights 3561b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé archive_name = join(self.tmp_dir, 'dist', 'fake-1.0.tar.gz') 3571b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé archive = tarfile.open(archive_name) 358a5076a2543e9d52128b875bc4b3b0521ed3a2b12Tarek Ziadé 359a5076a2543e9d52128b875bc4b3b0521ed3a2b12Tarek Ziadé # note that we are not testing the group ownership here 360a5076a2543e9d52128b875bc4b3b0521ed3a2b12Tarek Ziadé # because, depending on the platforms and the container 361a5076a2543e9d52128b875bc4b3b0521ed3a2b12Tarek Ziadé # rights (see #7408) 3621b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé try: 3631b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé for member in archive.getmembers(): 3642623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(member.uid, os.getuid()) 3651b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé finally: 3661b48671ef11a635fc452e35d08c14a601baa1db7Tarek Ziadé archive.close() 3678953913cf565b18742c16622a0b486e05bf2a113Tarek Ziadé 3680f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo # the following tests make sure there is a nice error message instead 3690f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo # of a traceback when parsing an invalid manifest template 3700f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo 371ae50babe32b53049910d8d0bb8a2eeac7c18a477Éric Araujo def _check_template(self, content): 3720f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo dist, cmd = self.get_cmd() 3730f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo os.chdir(self.tmp_dir) 3740f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo self.write_file('MANIFEST.in', content) 3750f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo cmd.ensure_finalized() 3760f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo cmd.filelist = FileList() 3770f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo cmd.read_template() 3780f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo warnings = self.get_logs(WARN) 3790f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo self.assertEqual(len(warnings), 1) 3800f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo 3810f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo def test_invalid_template_unknown_command(self): 382ae50babe32b53049910d8d0bb8a2eeac7c18a477Éric Araujo self._check_template('taunt knights *') 3830f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo 3840f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo def test_invalid_template_wrong_arguments(self): 3850f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo # this manifest command takes one argument 386ae50babe32b53049910d8d0bb8a2eeac7c18a477Éric Araujo self._check_template('prune') 3870f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo 3880f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo @unittest.skipIf(os.name != 'nt', 'test relevant for Windows only') 3890f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo def test_invalid_template_wrong_path(self): 3900f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo # on Windows, trailing slashes are not allowed 3910f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo # this used to crash instead of raising a warning: #8286 392ae50babe32b53049910d8d0bb8a2eeac7c18a477Éric Araujo self._check_template('include examples/') 3930f2dbf3645d28b74f1c1aa7cce29410d9dbc2d0eÉric Araujo 394c425f8fcb4aceb0cbebbe286947774491e1e317bEzio Melotti @unittest.skipUnless(zlib, "requires zlib") 395422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé def test_get_file_list(self): 396422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé # make sure MANIFEST is recalculated 397422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé dist, cmd = self.get_cmd() 398422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 399422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé # filling data_files by pointing files in package_data 400422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé dist.package_data = {'somecode': ['*.txt']} 401422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#') 402367d4c8a809ecfa7ad5ee68056ccd0b0a36f65caNadeem Vawda cmd.formats = ['gztar'] 403422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé cmd.ensure_finalized() 404422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé cmd.run() 405422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 406422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé f = open(cmd.manifest) 407422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé try: 408422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé manifest = [line.strip() for line in f.read().split('\n') 409422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé if line.strip() != ''] 410422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé finally: 411422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé f.close() 412422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 4132623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(len(manifest), 5) 414422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 415422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé # adding a file 416422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#') 417422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 418c2077b0d9b5bf99768c6f396bf7ae6c41b682465Ezio Melotti # make sure build_py is reinitialized, like a fresh run 419422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé build_py = dist.get_command_obj('build_py') 420422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé build_py.finalized = False 421422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé build_py.ensure_finalized() 422422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 423422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé cmd.run() 424422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 425422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé f = open(cmd.manifest) 426422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé try: 427422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé manifest2 = [line.strip() for line in f.read().split('\n') 428422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé if line.strip() != ''] 429422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé finally: 430422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé f.close() 431422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 432422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé # do we have the new file in MANIFEST ? 4332623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(len(manifest2), 6) 434422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé self.assertIn('doc2.txt', manifest2[-1]) 435422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 436b76eb9743eed4db801979e6d4c111a49dc33ccfbÉric Araujo @unittest.skipUnless(zlib, "requires zlib") 4370389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo def test_manifest_marker(self): 4380389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo # check that autogenerated MANIFESTs have a marker 4390389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo dist, cmd = self.get_cmd() 4400389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo cmd.ensure_finalized() 4410389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo cmd.run() 4420389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo 4430389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo f = open(cmd.manifest) 4440389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo try: 4450389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo manifest = [line.strip() for line in f.read().split('\n') 4460389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo if line.strip() != ''] 4470389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo finally: 4480389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo f.close() 4490389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo 4500389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo self.assertEqual(manifest[0], 4510389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo '# file GENERATED by distutils, do NOT edit') 4520389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo 453560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo @unittest.skipUnless(zlib, 'requires zlib') 454560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo def test_manifest_comments(self): 455560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo # make sure comments don't cause exceptions or wrong includes 456560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo contents = dedent("""\ 457560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo # bad.py 458560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo #bad.py 459560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo good.py 460560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo """) 461560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo dist, cmd = self.get_cmd() 462560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo cmd.ensure_finalized() 463560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo self.write_file((self.tmp_dir, cmd.manifest), contents) 464560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo self.write_file((self.tmp_dir, 'good.py'), '# pick me!') 465560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo self.write_file((self.tmp_dir, 'bad.py'), "# don't pick me!") 466560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo self.write_file((self.tmp_dir, '#bad.py'), "# don't pick me!") 467560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo cmd.run() 468560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo self.assertEqual(cmd.filelist.files, ['good.py']) 469560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo 470b76eb9743eed4db801979e6d4c111a49dc33ccfbÉric Araujo @unittest.skipUnless(zlib, "requires zlib") 4710389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo def test_manual_manifest(self): 4720389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo # check that a MANIFEST without a marker is left alone 4730389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo dist, cmd = self.get_cmd() 474cea5fc0b7bd212986fddc5d1d89d6c7f1a24113fÉric Araujo cmd.formats = ['gztar'] 4750389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo cmd.ensure_finalized() 4760389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo self.write_file((self.tmp_dir, cmd.manifest), 'README.manual') 477560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo self.write_file((self.tmp_dir, 'README.manual'), 478560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo 'This project maintains its MANIFEST file itself.') 4790389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo cmd.run() 480560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo self.assertEqual(cmd.filelist.files, ['README.manual']) 4810389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo 4820389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo f = open(cmd.manifest) 4830389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo try: 4840389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo manifest = [line.strip() for line in f.read().split('\n') 4850389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo if line.strip() != ''] 4860389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo finally: 4870389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo f.close() 4880389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo 4890389ae60fa4d02316b8c0d011f6c399d55f998bcÉric Araujo self.assertEqual(manifest, ['README.manual']) 490422545f0e7c83703d3a35ab85a210e19aa40332dTarek Ziadé 491560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo archive_name = join(self.tmp_dir, 'dist', 'fake-1.0.tar.gz') 492560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo archive = tarfile.open(archive_name) 493560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo try: 494560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo filenames = [tarinfo.name for tarinfo in archive] 495560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo finally: 496560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo archive.close() 497560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo self.assertEqual(sorted(filenames), ['fake-1.0', 'fake-1.0/PKG-INFO', 498560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo 'fake-1.0/README.manual']) 499560bf855d3788c31273162f0ccf777b3c1eedaa8Éric Araujo 50085d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadédef test_suite(): 501cb76804b172e2c6db37dcf9290579ffc304d1d33Tarek Ziadé return unittest.makeSuite(SDistTestCase) 50285d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadé 50385d6fb50221e62e11159ecc915ca3c18d73cfbbbTarek Ziadéif __name__ == "__main__": 50454274ad96aa033b9f3744dce395d08047467cca9Éric Araujo run_unittest(test_suite()) 505