| 
									
										
										
										
											2010-03-11 22:53:45 +00:00
										 |  |  | #! /usr/bin/env python3 | 
					
						
							| 
									
										
										
										
											2006-03-09 01:42:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 13:59:53 -04:00
										 |  |  | r"""
 | 
					
						
							| 
									
										
										
										
											2006-03-09 01:42:24 +00:00
										 |  |  | SVN helper script. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-09 01:59:27 +00:00
										 |  |  | 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. | 
					
						
							| 
									
										
										
										
											2006-03-09 01:42:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-09 01:59:27 +00:00
										 |  |  | import re | 
					
						
							| 
									
										
										
										
											2006-03-09 01:42:24 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | import subprocess | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-09 01:42:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-14 06:25:37 +00:00
										 |  |  | def propfiles(root, fn): | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  |     default = os.path.join(root, ".svn", "props", fn + ".svn-work") | 
					
						
							| 
									
										
										
										
											2008-06-14 01:51:58 +00:00
										 |  |  |     try: | 
					
						
							|  |  |  |         format = int(open(os.path.join(root, ".svn", "format")).read().strip()) | 
					
						
							|  |  |  |     except IOError: | 
					
						
							| 
									
										
										
										
											2008-06-14 06:25:37 +00:00
										 |  |  |         return [] | 
					
						
							| 
									
										
											  
											
												Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r67348 | benjamin.peterson | 2008-11-22 20:09:41 -0600 (Sat, 22 Nov 2008) | 1 line
  raise a better error
........
  r67355 | georg.brandl | 2008-11-23 13:17:25 -0600 (Sun, 23 Nov 2008) | 2 lines
  #4392: fix parameter name.
........
  r67359 | georg.brandl | 2008-11-23 15:57:30 -0600 (Sun, 23 Nov 2008) | 2 lines
  #4399: fix typo.
........
  r67362 | gregory.p.smith | 2008-11-23 18:41:43 -0600 (Sun, 23 Nov 2008) | 2 lines
  Document PY_SSIZE_T_CLEAN for PyArg_ParseTuple.
........
  r67364 | benjamin.peterson | 2008-11-23 19:16:29 -0600 (Sun, 23 Nov 2008) | 2 lines
  replace reference to debugger-hooks
........
  r67365 | benjamin.peterson | 2008-11-23 22:09:03 -0600 (Sun, 23 Nov 2008) | 1 line
  #4396 make the parser module correctly validate the with syntax
........
  r67367 | georg.brandl | 2008-11-24 10:16:07 -0600 (Mon, 24 Nov 2008) | 2 lines
  Fix typo.
........
  r67368 | georg.brandl | 2008-11-24 13:56:47 -0600 (Mon, 24 Nov 2008) | 2 lines
  #4404: make clear what "path" is.
........
  r67398 | benjamin.peterson | 2008-11-26 11:39:17 -0600 (Wed, 26 Nov 2008) | 1 line
  fix typo in sqlite3 docs
........
  r67423 | jesse.noller | 2008-11-28 12:59:35 -0600 (Fri, 28 Nov 2008) | 2 lines
  issue4238: bsd support for cpu_count
........
  r67424 | christian.heimes | 2008-11-28 13:33:33 -0600 (Fri, 28 Nov 2008) | 1 line
  Retain copyright of processing examples. This was requested by a Debian maintainer during packaging of the multiprocessing package for 2.4/2.5
........
  r67432 | benjamin.peterson | 2008-11-28 17:18:46 -0600 (Fri, 28 Nov 2008) | 1 line
  SVN format 9 is the same it seems
........
  r67440 | jeremy.hylton | 2008-11-28 17:42:59 -0600 (Fri, 28 Nov 2008) | 4 lines
  Move definition int sval into branch of ifdef where it is used.
  Otherwise, you get a warning about an undefined variable.
........
  r67441 | jeremy.hylton | 2008-11-28 18:09:16 -0600 (Fri, 28 Nov 2008) | 2 lines
  Reflow long lines.
........
  r67444 | amaury.forgeotdarc | 2008-11-28 20:03:32 -0600 (Fri, 28 Nov 2008) | 2 lines
  Fix a small typo in docstring
........
  r67445 | benjamin.peterson | 2008-11-29 21:07:33 -0600 (Sat, 29 Nov 2008) | 1 line
  StringIO.close() stops you from using the buffer, too
........
  r67454 | benjamin.peterson | 2008-11-30 08:43:23 -0600 (Sun, 30 Nov 2008) | 1 line
  note the version that works
........
  r67455 | martin.v.loewis | 2008-11-30 13:28:27 -0600 (Sun, 30 Nov 2008) | 1 line
  Issue #4365: Add crtassem.h constants to the msvcrt module.
........
  r67457 | christian.heimes | 2008-11-30 15:16:28 -0600 (Sun, 30 Nov 2008) | 1 line
  w# requires Py_ssize_t
........
  r67458 | benjamin.peterson | 2008-11-30 15:46:16 -0600 (Sun, 30 Nov 2008) | 1 line
  fix pyspecific extensions that were broken by Sphinx's grand renaming
........
											
										 
											2008-11-30 22:46:23 +00:00
										 |  |  |     if format in (8, 9): | 
					
						
							|  |  |  |         # In version 8 and 9, committed props are stored in prop-base, local | 
					
						
							|  |  |  |         # modifications in props | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  |         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") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-14 01:51:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-09 02:20:05 +00:00
										 |  |  | def proplist(root, fn): | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  |     """Return a list of property names for file fn in directory root.""" | 
					
						
							| 
									
										
										
										
											2006-03-09 02:20:05 +00:00
										 |  |  |     result = [] | 
					
						
							| 
									
										
										
										
											2008-06-14 06:25:37 +00:00
										 |  |  |     for path in propfiles(root, fn): | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             f = open(path) | 
					
						
							|  |  |  |         except IOError: | 
					
						
							|  |  |  |             # no properties file: not under version control, | 
					
						
							|  |  |  |             # or no properties set | 
					
						
							|  |  |  |             continue | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  |         while True: | 
					
						
							| 
									
										
										
										
											2008-06-14 06:25:37 +00:00
										 |  |  |             # 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() | 
					
						
							| 
									
										
										
										
											2006-03-09 02:20:05 +00:00
										 |  |  |     return result | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def set_eol_native(path): | 
					
						
							|  |  |  |     cmd = 'svn propset svn:eol-style native "{}"'.format(path) | 
					
						
							|  |  |  |     propset = subprocess.Popen(cmd, shell=True) | 
					
						
							|  |  |  |     propset.wait() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-09 18:49:35 +00:00
										 |  |  | possible_text_file = re.compile(r"\.([hc]|py|txt|sln|vcproj)$").search | 
					
						
							| 
									
										
										
										
											2006-03-09 01:59:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							|  |  |  |     for arg in sys.argv[1:] or [os.curdir]: | 
					
						
							|  |  |  |         if os.path.isfile(arg): | 
					
						
							|  |  |  |             root, fn = os.path.split(arg) | 
					
						
							| 
									
										
										
										
											2006-03-09 02:20:05 +00:00
										 |  |  |             if 'svn:eol-style' not in proplist(root, fn): | 
					
						
							| 
									
										
										
										
											2010-08-09 12:24:20 +00:00
										 |  |  |                 set_eol_native(arg) | 
					
						
							|  |  |  |         elif os.path.isdir(arg): | 
					
						
							|  |  |  |             for root, dirs, files in os.walk(arg): | 
					
						
							|  |  |  |                 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) | 
					
						
							|  |  |  |                             set_eol_native(path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     main() |