mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	Merged revisions 81258 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
  r81258 | tarek.ziade | 2010-05-17 12:38:53 +0200 (Mon, 17 May 2010) | 9 lines
  Merged revisions 81255 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk
  ........
    r81255 | tarek.ziade | 2010-05-17 12:06:20 +0200 (Mon, 17 May 2010) | 1 line
    Fixed #8688: Distutils now recalculates MANIFEST everytime.
  ........
................
			
			
This commit is contained in:
		
							parent
							
								
									2e71d014ea
								
							
						
					
					
						commit
						dd4671a93e
					
				
					 3 changed files with 66 additions and 55 deletions
				
			
		|  | @ -173,56 +173,28 @@ def get_file_list(self): | |||
|         distribution, and put it in 'self.filelist'.  This might involve | ||||
|         reading the manifest template (and writing the manifest), or just | ||||
|         reading the manifest, or just using the default file set -- it all | ||||
|         depends on the user's options and the state of the filesystem. | ||||
|         depends on the user's options. | ||||
|         """ | ||||
|         # If we have a manifest template, see if it's newer than the | ||||
|         # manifest; if so, we'll regenerate the manifest. | ||||
|         # new behavior: | ||||
|         # the file list is recalculated everytime because | ||||
|         # even if MANIFEST.in or setup.py are not changed | ||||
|         # the user might have added some files in the tree that | ||||
|         # need to be included. | ||||
|         # | ||||
|         #  This makes --force the default and only behavior. | ||||
|         template_exists = os.path.isfile(self.template) | ||||
|         if template_exists: | ||||
|             template_newer = dep_util.newer(self.template, self.manifest) | ||||
| 
 | ||||
|         # The contents of the manifest file almost certainly depend on the | ||||
|         # setup script as well as the manifest template -- so if the setup | ||||
|         # script is newer than the manifest, we'll regenerate the manifest | ||||
|         # from the template.  (Well, not quite: if we already have a | ||||
|         # manifest, but there's no template -- which will happen if the | ||||
|         # developer elects to generate a manifest some other way -- then we | ||||
|         # can't regenerate the manifest, so we don't.) | ||||
|         self.debug_print("checking if %s newer than %s" % | ||||
|                          (self.distribution.script_name, self.manifest)) | ||||
|         setup_newer = dep_util.newer(self.distribution.script_name, | ||||
|                                      self.manifest) | ||||
| 
 | ||||
|         # cases: | ||||
|         #   1) no manifest, template exists: generate manifest | ||||
|         #      (covered by 2a: no manifest == template newer) | ||||
|         #   2) manifest & template exist: | ||||
|         #      2a) template or setup script newer than manifest: | ||||
|         #          regenerate manifest | ||||
|         #      2b) manifest newer than both: | ||||
|         #          do nothing (unless --force or --manifest-only) | ||||
|         #   3) manifest exists, no template: | ||||
|         #      do nothing (unless --force or --manifest-only) | ||||
|         #   4) no manifest, no template: generate w/ warning ("defaults only") | ||||
| 
 | ||||
|         manifest_outofdate = (template_exists and | ||||
|                               (template_newer or setup_newer)) | ||||
|         force_regen = self.force_manifest or self.manifest_only | ||||
|         manifest_exists = os.path.isfile(self.manifest) | ||||
|         neither_exists = (not template_exists and not manifest_exists) | ||||
| 
 | ||||
|         # Regenerate the manifest if necessary (or if explicitly told to) | ||||
|         if manifest_outofdate or neither_exists or force_regen: | ||||
|         if not template_exists: | ||||
|                 self.warn("manifest template '%s' does not exist " | ||||
|                           "(using default file list)" | ||||
|                           % self.template) | ||||
|             self.warn(("manifest template '%s' does not exist " + | ||||
|                         "(using default file list)") % | ||||
|                         self.template) | ||||
|         self.filelist.findall() | ||||
| 
 | ||||
|         if self.use_defaults: | ||||
|             self.add_defaults() | ||||
| 
 | ||||
|         if template_exists: | ||||
|             self.read_template() | ||||
| 
 | ||||
|         if self.prune: | ||||
|             self.prune_file_list() | ||||
| 
 | ||||
|  | @ -230,10 +202,6 @@ def get_file_list(self): | |||
|         self.filelist.remove_duplicates() | ||||
|         self.write_manifest() | ||||
| 
 | ||||
|         # Don't regenerate the manifest, just read it in. | ||||
|         else: | ||||
|             self.read_manifest() | ||||
| 
 | ||||
|     def add_defaults(self): | ||||
|         """Add all the default files to self.filelist: | ||||
|           - README or README.txt | ||||
|  |  | |||
|  | @ -277,6 +277,47 @@ def test_finalize_options(self): | |||
|         self.assertRaises(DistutilsOptionError, cmd.finalize_options) | ||||
| 
 | ||||
| 
 | ||||
|     def test_get_file_list(self): | ||||
|         # make sure MANIFEST is recalculated | ||||
|         dist, cmd = self.get_cmd() | ||||
| 
 | ||||
|         # filling data_files by pointing files in package_data | ||||
|         dist.package_data = {'somecode': ['*.txt']} | ||||
|         self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#') | ||||
|         cmd.ensure_finalized() | ||||
|         cmd.run() | ||||
| 
 | ||||
|         f = open(cmd.manifest) | ||||
|         try: | ||||
|             manifest = [line.strip() for line in f.read().split('\n') | ||||
|                         if line.strip() != ''] | ||||
|         finally: | ||||
|             f.close() | ||||
| 
 | ||||
|         self.assertEquals(len(manifest), 4) | ||||
| 
 | ||||
|         # adding a file | ||||
|         self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#') | ||||
| 
 | ||||
|         # make sure build_py is reinitinialized, like a fresh run | ||||
|         build_py = dist.get_command_obj('build_py') | ||||
|         build_py.finalized = False | ||||
|         build_py.ensure_finalized() | ||||
| 
 | ||||
|         cmd.run() | ||||
| 
 | ||||
|         f = open(cmd.manifest) | ||||
|         try: | ||||
|             manifest2 = [line.strip() for line in f.read().split('\n') | ||||
|                          if line.strip() != ''] | ||||
|         finally: | ||||
|             f.close() | ||||
| 
 | ||||
|         # do we have the new file in MANIFEST ? | ||||
|         self.assertEquals(len(manifest2), 5) | ||||
|         self.assertIn('doc2.txt', manifest2[-1]) | ||||
| 
 | ||||
| 
 | ||||
| def test_suite(): | ||||
|     return unittest.makeSuite(SDistTestCase) | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,6 +43,8 @@ Core and Builtins | |||
| Library | ||||
| ------- | ||||
| 
 | ||||
| - Issue #8688: Distutils now recalculates MANIFEST everytime. | ||||
| 
 | ||||
| - Issue #5099: subprocess.Popen.__del__ no longer references global objects | ||||
|   to prevent issues during interpreter shutdown. | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tarek Ziadé
						Tarek Ziadé