mirror of
https://github.com/acidanthera/audk.git
synced 2025-05-04 06:30:11 +02:00
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1944 --exclude cannot be used under certain circumstances 1.The value of the parameter USES an absolute path 2.The value of Exclude parameters is based on the value of the Path parameter Neither of these approaches currently works This patch is going to fix that 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> Reviewed-by: Liming Gao <liming.gao@intel.com>
107 lines
4.9 KiB
Python
107 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:
|
|
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)
|