mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 6d291c14b0
			
		
	
	
		6d291c14b0
		
	
	
	
	
		
			
			svn+ssh://pythondev@svn.python.org/python/trunk ........ r64265 | martin.v.loewis | 2008-06-14 08:24:44 +0200 (Sa, 14 Jun 2008) | 2 lines Conservatively restrict support to format 8 repositories. ........
		
			
				
	
	
		
			91 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #! /usr/bin/env python
 | |
| 
 | |
| """
 | |
| SVN helper script.
 | |
| 
 | |
| Try to set the svn:eol-style property to "native" on every .py, .txt, .c and
 | |
| .h file in the directory tree rooted at the current directory.
 | |
| 
 | |
| Files with the svn:eol-style property already set (to anything) are skipped.
 | |
| 
 | |
| svn will itself refuse to set this property on a file that's not under SVN
 | |
| control, or that has a binary mime-type property set.  This script inherits
 | |
| that behavior, and passes on whatever warning message the failing "svn
 | |
| propset" command produces.
 | |
| 
 | |
| In the Python project, it's safe to invoke this script from the root of
 | |
| a checkout.
 | |
| 
 | |
| No output is produced for files that are ignored.  For a file that gets
 | |
| svn:eol-style set, output looks like:
 | |
| 
 | |
|     property 'svn:eol-style' set on 'Lib\ctypes\__init__.py'
 | |
| 
 | |
| For a file not under version control:
 | |
| 
 | |
|     svn: warning: 'patch-finalizer.txt' is not under version control
 | |
| 
 | |
| and for a file with a binary mime-type property:
 | |
| 
 | |
|     svn: File 'Lib\test\test_pep263.py' has binary mime type property
 | |
| """
 | |
| 
 | |
| import re
 | |
| import os
 | |
| 
 | |
| def propfiles(root, fn):
 | |
|     default = os.path.join(root, ".svn", "props", fn+".svn-work")
 | |
|     try:
 | |
|         format = int(open(os.path.join(root, ".svn", "format")).read().strip())
 | |
|     except IOError:
 | |
|         return []
 | |
|     if format == 8:
 | |
|         # In version 8, committed props are stored in prop-base,
 | |
|         # local modifications in props
 | |
|         return [os.path.join(root, ".svn", "prop-base", fn+".svn-base"),
 | |
|                 os.path.join(root, ".svn", "props", fn+".svn-work")]
 | |
|     raise ValueError, "Unknown repository format"
 | |
| 
 | |
| def proplist(root, fn):
 | |
|     "Return a list of property names for file fn in directory root"
 | |
|     result = []
 | |
|     for path in propfiles(root, fn):
 | |
|         try:
 | |
|             f = open(path)
 | |
|         except IOError:
 | |
|             # no properties file: not under version control,
 | |
|             # or no properties set
 | |
|             continue
 | |
|         while 1:
 | |
|             # key-value pairs, of the form
 | |
|             # K <length>
 | |
|             # <keyname>NL
 | |
|             # V length
 | |
|             # <value>NL
 | |
|             # END
 | |
|             line = f.readline()
 | |
|             if line.startswith("END"):
 | |
|                 break
 | |
|             assert line.startswith("K ")
 | |
|             L = int(line.split()[1])
 | |
|             key = f.read(L)
 | |
|             result.append(key)
 | |
|             f.readline()
 | |
|             line = f.readline()
 | |
|             assert line.startswith("V ")
 | |
|             L = int(line.split()[1])
 | |
|             value = f.read(L)
 | |
|             f.readline()
 | |
|         f.close()
 | |
|     return result
 | |
| 
 | |
| possible_text_file = re.compile(r"\.([hc]|py|txt|sln|vcproj)$").search
 | |
| 
 | |
| for root, dirs, files in os.walk('.'):
 | |
|     if '.svn' in dirs:
 | |
|         dirs.remove('.svn')
 | |
|     for fn in files:
 | |
|         if possible_text_file(fn):
 | |
|             if 'svn:eol-style' not in proplist(root, fn):
 | |
|                 path = os.path.join(root, fn)
 | |
|                 os.system('svn propset svn:eol-style native "%s"' % path)
 |