BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1944 FormatDosFiles.py Intel\ServerSiliconPkg --exclude Library\SimRegisters\ Its parameter "Library\SimRegisters\" ends with '\' but I can't seem to get it to exclude the SimRegisters directory This patch is going to fix this issue Cc: Liming Gao <liming.gao@intel.com> Cc: Bob Feng <bob.c.feng@intel.com> Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
		
			
				
	
	
		
			108 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # @file FormatDosFiles.py
 | |
| # This script format the source files to follow dos style.
 | |
| # It supports Python2.x and Python3.x both.
 | |
| #
 | |
| #  Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
 | |
| #
 | |
| #  SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| #
 | |
| 
 | |
| #
 | |
| # Import Modules
 | |
| #
 | |
| from __future__ import print_function
 | |
| import argparse
 | |
| import os
 | |
| import os.path
 | |
| import re
 | |
| import sys
 | |
| import copy
 | |
| 
 | |
| __prog__        = 'FormatDosFiles'
 | |
| __version__     = '%s Version %s' % (__prog__, '0.10 ')
 | |
| __copyright__   = 'Copyright (c) 2018-2019, Intel Corporation. All rights reserved.'
 | |
| __description__ = 'Convert source files to meet the EDKII C Coding Standards Specification.\n'
 | |
| DEFAULT_EXT_LIST = ['.h', '.c', '.nasm', '.nasmb', '.asm', '.S', '.inf', '.dec', '.dsc', '.fdf', '.uni', '.asl', '.aslc', '.vfr', '.idf', '.txt', '.bat', '.py']
 | |
| 
 | |
| #For working in python2 and python3 environment, re pattern should use binary string, which is bytes type in python3.
 | |
| #Because in python3,read from file in binary mode will return bytes type,and in python3 bytes type can not be mixed with str type.
 | |
| def FormatFile(FilePath, Args):
 | |
|     with open(FilePath, 'rb') as Fd:
 | |
|         Content = Fd.read()
 | |
|         # Convert the line endings to CRLF
 | |
|         Content = re.sub(br'([^\r])\n', br'\1\r\n', Content)
 | |
|         Content = re.sub(br'^\n', br'\r\n', Content, flags=re.MULTILINE)
 | |
|         # Add a new empty line if the file is not end with one
 | |
|         Content = re.sub(br'([^\r\n])$', br'\1\r\n', Content)
 | |
|         # Remove trailing white spaces
 | |
|         Content = re.sub(br'[ \t]+(\r\n)', br'\1', Content, flags=re.MULTILINE)
 | |
|         # Replace '\t' with two spaces
 | |
|         Content = re.sub(b'\t', b'  ', Content)
 | |
|         with open(FilePath, 'wb') as Fd:
 | |
|             Fd.write(Content)
 | |
|             if not Args.Quiet:
 | |
|                 print(FilePath)
 | |
| 
 | |
| def FormatFilesInDir(DirPath, ExtList, Args):
 | |
| 
 | |
|     FileList = []
 | |
|     ExcludeDir = DirPath
 | |
|     for DirPath, DirNames, FileNames in os.walk(DirPath):
 | |
|         if Args.Exclude:
 | |
|             DirNames[:] = [d for d in DirNames if d not in Args.Exclude]
 | |
|             FileNames[:] = [f for f in FileNames if f not in Args.Exclude]
 | |
|             Continue = False
 | |
|             for Path in Args.Exclude:
 | |
|                 Path = Path.strip('\\').strip('/')
 | |
|                 if not os.path.isdir(Path) and not os.path.isfile(Path):
 | |
|                     Path = os.path.join(ExcludeDir, Path)
 | |
|                 if os.path.isdir(Path) and Path.endswith(DirPath):
 | |
|                     DirNames[:] = []
 | |
|                     Continue = True
 | |
|                 elif os.path.isfile(Path):
 | |
|                     FilePaths = FileNames
 | |
|                     for ItemPath in FilePaths:
 | |
|                         FilePath = os.path.join(DirPath, ItemPath)
 | |
|                         if Path.endswith(FilePath):
 | |
|                             FileNames.remove(ItemPath)
 | |
|             if Continue:
 | |
|                 continue
 | |
|         for FileName in [f for f in FileNames if any(f.endswith(ext) for ext in ExtList)]:
 | |
|                 FileList.append(os.path.join(DirPath, FileName))
 | |
|     for File in FileList:
 | |
|         FormatFile(File, Args)
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     parser = argparse.ArgumentParser(prog=__prog__, description=__description__ + __copyright__, conflict_handler = 'resolve')
 | |
| 
 | |
|     parser.add_argument('Path', nargs='+',
 | |
|                         help='the path for files to be converted.It could be directory or file path.')
 | |
|     parser.add_argument('--version', action='version', version=__version__)
 | |
|     parser.add_argument('--append-extensions', dest='AppendExt', nargs='+',
 | |
|                         help='append file extensions filter to default extensions. (Example: .txt .c .h)')
 | |
|     parser.add_argument('--override-extensions', dest='OverrideExt', nargs='+',
 | |
|                         help='override file extensions filter on default extensions. (Example: .txt .c .h)')
 | |
|     parser.add_argument('-v', '--verbose', dest='Verbose', action='store_true',
 | |
|                         help='increase output messages')
 | |
|     parser.add_argument('-q', '--quiet', dest='Quiet', action='store_true',
 | |
|                         help='reduce output messages')
 | |
|     parser.add_argument('--debug', dest='Debug', type=int, metavar='[0-9]', choices=range(0, 10), default=0,
 | |
|                         help='set debug level')
 | |
|     parser.add_argument('--exclude', dest='Exclude', nargs='+', help="directory name or file name which will be excluded")
 | |
|     args = parser.parse_args()
 | |
|     DefaultExt = copy.copy(DEFAULT_EXT_LIST)
 | |
| 
 | |
|     if args.OverrideExt is not None:
 | |
|         DefaultExt = args.OverrideExt
 | |
|     if args.AppendExt is not None:
 | |
|         DefaultExt = list(set(DefaultExt + args.AppendExt))
 | |
| 
 | |
|     for Path in args.Path:
 | |
|         if not os.path.exists(Path):
 | |
|             print("not exists path: {0}".format(Path))
 | |
|             sys.exit(1)
 | |
|         if os.path.isdir(Path):
 | |
|             FormatFilesInDir(Path, DefaultExt, args)
 | |
|         elif os.path.isfile(Path):
 | |
|             FormatFile(Path, args)
 |