##// END OF EJS Templates
Backport PR #2068: record sysinfo in sdist...
MinRK -
Show More
@@ -52,7 +52,6 b' from glob import glob'
52 52 if os.path.exists('MANIFEST'): os.remove('MANIFEST')
53 53
54 54 from distutils.core import setup
55 from distutils.command.upload import upload
56 55
57 56 # On Python 3, we need distribute (new setuptools) to do the 2to3 conversion
58 57 if PY3:
@@ -166,14 +165,16 b' packages = find_packages()'
166 165 package_data = find_package_data()
167 166 data_files = find_data_files()
168 167
169 setup_args['cmdclass'] = {'build_py': record_commit_info('IPython')}
170 168 setup_args['packages'] = packages
171 169 setup_args['package_data'] = package_data
172 170 setup_args['data_files'] = data_files
173 171
174 172 #---------------------------------------------------------------------------
175 # custom upload_wininst command
173 # custom distutils commands
176 174 #---------------------------------------------------------------------------
175 # imports here, so they are after setuptools import if there was one
176 from distutils.command.sdist import sdist
177 from distutils.command.upload import upload
177 178
178 179 class UploadWindowsInstallers(upload):
179 180
@@ -194,7 +195,11 b' class UploadWindowsInstallers(upload):'
194 195 for dist_file in glob(self.files):
195 196 self.upload_file('bdist_wininst', 'any', dist_file)
196 197
197 setup_args['cmdclass']['upload_wininst'] = UploadWindowsInstallers
198 setup_args['cmdclass'] = {
199 'build_py': record_commit_info('IPython'),
200 'sdist' : record_commit_info('IPython', sdist),
201 'upload_wininst' : UploadWindowsInstallers,
202 }
198 203
199 204 #---------------------------------------------------------------------------
200 205 # Handle scripts, dependencies, and setuptools specific things
@@ -369,7 +369,7 b' def check_for_dependencies():'
369 369 check_for_readline()
370 370
371 371 def record_commit_info(pkg_dir, build_cmd=build_py):
372 """ Return extended build command class for recording commit
372 """ Return extended build or sdist command class for recording commit
373 373
374 374 records git commit in IPython.utils._sysinfo.commit
375 375
@@ -380,18 +380,40 b' def record_commit_info(pkg_dir, build_cmd=build_py):'
380 380 ''' Subclass to write commit data into installation tree '''
381 381 def run(self):
382 382 build_cmd.run(self)
383 # this one will only fire for build commands
384 if hasattr(self, 'build_lib'):
385 self._record_commit(self.build_lib)
386
387 def make_release_tree(self, base_dir, files):
388 # this one will fire for sdist
389 build_cmd.make_release_tree(self, base_dir, files)
390 self._record_commit(base_dir)
391
392 def _record_commit(self, base_dir):
383 393 import subprocess
384 394 proc = subprocess.Popen('git rev-parse --short HEAD',
385 395 stdout=subprocess.PIPE,
386 396 stderr=subprocess.PIPE,
387 397 shell=True)
388 398 repo_commit, _ = proc.communicate()
389 repo_commit = repo_commit.strip()
390 # We write the installation commit even if it's empty
391 out_pth = pjoin(self.build_lib, pkg_dir, 'utils', '_sysinfo.py')
399 repo_commit = repo_commit.strip().decode("ascii")
400
401 out_pth = pjoin(base_dir, pkg_dir, 'utils', '_sysinfo.py')
402 if os.path.isfile(out_pth) and not repo_commit:
403 # nothing to write, don't clobber
404 return
405
406 print("writing git commit '%s' to %s" % (repo_commit, out_pth))
407
408 # remove to avoid overwriting original via hard link
409 try:
410 os.remove(out_pth)
411 except (IOError, OSError):
412 pass
413 print (out_pth, file=sys.stderr)
392 414 with open(out_pth, 'w') as out_file:
393 415 out_file.writelines([
394 416 '# GENERATED BY setup.py\n',
395 'commit = "%s"\n' % repo_commit.decode('ascii'),
417 'commit = "%s"\n' % repo_commit,
396 418 ])
397 419 return MyBuildPy
General Comments 0
You need to be logged in to leave comments. Login now