44import shutil
55import zipfile
66from os .path import join
7+ import sys
78
89from distutils .command .sdist import sdist
910from distutils .core import Distribution
1011from distutils .tests .test_config import PyPIRCCommandTestCase
12+ from distutils .errors import DistutilsExecError
13+ from distutils .spawn import spawn
1114
1215CURDIR = os .path .dirname (__file__ )
1316TEMP_PKG = join (CURDIR , 'temppkg' )
@@ -35,6 +38,19 @@ def tearDown(self):
3538 shutil .rmtree (TEMP_PKG )
3639 PyPIRCCommandTestCase .tearDown (self )
3740
41+ def _init_tmp_pkg (self ):
42+ if os .path .exists (TEMP_PKG ):
43+ shutil .rmtree (TEMP_PKG )
44+ os .mkdir (TEMP_PKG )
45+ os .mkdir (join (TEMP_PKG , 'somecode' ))
46+ os .mkdir (join (TEMP_PKG , 'dist' ))
47+ # creating a MANIFEST, a package, and a README
48+ self ._write (join (TEMP_PKG , 'MANIFEST.in' ), MANIFEST_IN )
49+ self ._write (join (TEMP_PKG , 'README' ), 'xxx' )
50+ self ._write (join (TEMP_PKG , 'somecode' , '__init__.py' ), '#' )
51+ self ._write (join (TEMP_PKG , 'setup.py' ), SETUP_PY )
52+ os .chdir (TEMP_PKG )
53+
3854 def _write (self , path , content ):
3955 f = open (path , 'w' )
4056 try :
@@ -46,15 +62,7 @@ def test_prune_file_list(self):
4662 # this test creates a package with some vcs dirs in it
4763 # and launch sdist to make sure they get pruned
4864 # 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 )
65+ self ._init_tmp_pkg ()
5866
5967 # creating VCS directories with some files in them
6068 os .mkdir (join (TEMP_PKG , 'somecode' , '.svn' ))
@@ -68,8 +76,6 @@ def test_prune_file_list(self):
6876 self ._write (join (TEMP_PKG , 'somecode' , '.git' ,
6977 'ok' ), 'xxx' )
7078
71- os .chdir (TEMP_PKG )
72-
7379 # now building a sdist
7480 dist = Distribution ()
7581 dist .script_name = 'setup.py'
@@ -103,6 +109,55 @@ def test_prune_file_list(self):
103109 # making sure everything has been pruned correctly
104110 self .assertEquals (len (content ), 4 )
105111
112+ def test_make_distribution (self ):
113+
114+ self ._init_tmp_pkg ()
115+
116+ # check if tar is installed under win32
117+ if sys .platform == 'win32' :
118+ try :
119+ spawn ('tar --help' )
120+ except DistutilsExecError :
121+ # let's return, no need to go further
122+ return
123+
124+ # now building a sdist
125+ dist = Distribution ()
126+ dist .script_name = 'setup.py'
127+ dist .metadata .name = 'fake'
128+ dist .metadata .version = '1.0'
129+ dist .metadata .url = 'http://xxx'
130+ dist .metadata .author = dist .metadata .author_email = 'xxx'
131+ dist .packages = ['somecode' ]
132+ dist .include_package_data = True
133+ cmd = sdist (dist )
134+ cmd .manifest = 'MANIFEST'
135+ cmd .template = 'MANIFEST.in'
136+ cmd .dist_dir = 'dist'
137+
138+ # creating a gztar then a tar
139+ cmd .formats = ['gztar' , 'tar' ]
140+ cmd .run ()
141+
142+ # making sure we have two files
143+ dist_folder = join (TEMP_PKG , 'dist' )
144+ result = os .listdir (dist_folder )
145+ result .sort ()
146+ self .assertEquals (result ,
147+ ['fake-1.0.tar' , 'fake-1.0.tar.gz' ] )
148+
149+ os .remove (join (dist_folder , 'fake-1.0.tar' ))
150+ os .remove (join (dist_folder , 'fake-1.0.tar.gz' ))
151+
152+ # now trying a tar then a gztar
153+ cmd .formats = ['tar' , 'gztar' ]
154+ cmd .run ()
155+
156+ result = os .listdir (dist_folder )
157+ result .sort ()
158+ self .assertEquals (result ,
159+ ['fake-1.0.tar' , 'fake-1.0.tar.gz' ])
160+
106161def test_suite ():
107162 return unittest .makeSuite (sdistTestCase )
108163
0 commit comments