Re: [edk2] [PATCH] BaseTools/Ecc: Add some new checkpoints

2018-07-25 Thread Zhu, Yonghong
Reviewed-by: Yonghong Zhu  

Best Regards,
Zhu Yonghong


-Original Message-
From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Yonghong 
Zhu
Sent: Monday, July 23, 2018 2:03 PM
To: edk2-devel@lists.01.org
Cc: Chen, Hesheng 
Subject: [edk2] [PATCH] BaseTools/Ecc: Add some new checkpoints

From: hchen30 

1. Add a checkpoint to check NO TABs.
2. Add a checkpoint to check line ending with CRLF.
3. Add a checkpoint to check no trailing spaces.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hess Chen 
---
 BaseTools/Source/Python/Ecc/Check.py | 54 
 BaseTools/Source/Python/Ecc/Configuration.py |  4 +++  
BaseTools/Source/Python/Ecc/EccToolError.py  |  8 +++--
 BaseTools/Source/Python/Ecc/config.ini   |  4 +++
 4 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/BaseTools/Source/Python/Ecc/Check.py 
b/BaseTools/Source/Python/Ecc/Check.py
index 0b81013d77..6803afdfdd 100644
--- a/BaseTools/Source/Python/Ecc/Check.py
+++ b/BaseTools/Source/Python/Ecc/Check.py
@@ -188,6 +188,60 @@ class Check(object):
 def GeneralCheck(self):
 self.GeneralCheckNonAcsii()
 self.UniCheck()
+self.GeneralCheckNoTab()
+self.GeneralCheckLineEnding()
+self.GeneralCheckTrailingWhiteSpaceLine()
+
+# Check whether NO Tab is used, replaced with spaces
+def GeneralCheckNoTab(self):
+if EccGlobalData.gConfig.GeneralCheckNoTab == '1' or 
EccGlobalData.gConfig.GeneralCheckAll == '1' or EccGlobalData.gConfig.CheckAll 
== '1':
+EdkLogger.quiet("Checking No TAB used in file ...")
+SqlCommand = """select ID, FullPath, ExtName from File where 
ExtName in ('.dec', '.inf', '.dsc', 'c', 'h')"""
+RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)
+for Record in RecordSet:
+if Record[2].upper() not in 
EccGlobalData.gConfig.BinaryExtList:
+op = open(Record[1]).readlines()
+IndexOfLine = 0
+for Line in op:
+IndexOfLine += 1
+IndexOfChar = 0
+for Char in Line:
+IndexOfChar += 1
+if Char == '\t':
+OtherMsg = "File %s has TAB char at line %s 
column %s" % (Record[1], IndexOfLine, IndexOfChar)
+
+ EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_NO_TAB, 
+ OtherMsg=OtherMsg, BelongsToTable='File', BelongsToItem=Record[0])
+
+# Check Only use CRLF (Carriage Return Line Feed) line endings.
+def GeneralCheckLineEnding(self):
+if EccGlobalData.gConfig.GeneralCheckLineEnding == '1' or 
EccGlobalData.gConfig.GeneralCheckAll == '1' or EccGlobalData.gConfig.CheckAll 
== '1':
+EdkLogger.quiet("Checking line ending in file ...")
+SqlCommand = """select ID, FullPath, ExtName from File where 
ExtName in ('.dec', '.inf', '.dsc', 'c', 'h')"""
+RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)
+for Record in RecordSet:
+if Record[2].upper() not in 
EccGlobalData.gConfig.BinaryExtList:
+op = open(Record[1], 'rb').readlines()
+IndexOfLine = 0
+for Line in op:
+IndexOfLine += 1
+if not Line.endswith('\r\n'):
+OtherMsg = "File %s has invalid line ending at 
line %s" % (Record[1], IndexOfLine)
+
+ EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_INVALID_LINE_EN
+ DING, OtherMsg=OtherMsg, BelongsToTable='File', 
+ BelongsToItem=Record[0])
+
+# Check if there is no trailing white space in one line.
+def GeneralCheckTrailingWhiteSpaceLine(self):
+if EccGlobalData.gConfig.GeneralCheckTrailingWhiteSpaceLine == '1' or 
EccGlobalData.gConfig.GeneralCheckAll == '1' or EccGlobalData.gConfig.CheckAll 
== '1':
+EdkLogger.quiet("Checking trailing white space line in file ...")
+SqlCommand = """select ID, FullPath, ExtName from File where 
ExtName in ('.dec', '.inf', '.dsc', 'c', 'h')"""
+RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)
+for Record in RecordSet:
+if Record[2].upper() not in 
EccGlobalData.gConfig.BinaryExtList:
+op = open(Record[1], 'rb').readlines()
+IndexOfLine = 0
+for Line in op:
+IndexOfLine += 1
+if Line.replace('\r', '').replace('\n', '').endswith(' 
'):
+OtherMsg = "File %s has trailing white spaces at 
line %s" % (Record[1], IndexOfLine)
+
+ 

[edk2] [PATCH] BaseTools/Ecc: Add some new checkpoints

2018-07-23 Thread Yonghong Zhu
From: hchen30 

1. Add a checkpoint to check NO TABs.
2. Add a checkpoint to check line ending with CRLF.
3. Add a checkpoint to check no trailing spaces.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hess Chen 
---
 BaseTools/Source/Python/Ecc/Check.py | 54 
 BaseTools/Source/Python/Ecc/Configuration.py |  4 +++
 BaseTools/Source/Python/Ecc/EccToolError.py  |  8 +++--
 BaseTools/Source/Python/Ecc/config.ini   |  4 +++
 4 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/BaseTools/Source/Python/Ecc/Check.py 
b/BaseTools/Source/Python/Ecc/Check.py
index 0b81013d77..6803afdfdd 100644
--- a/BaseTools/Source/Python/Ecc/Check.py
+++ b/BaseTools/Source/Python/Ecc/Check.py
@@ -188,6 +188,60 @@ class Check(object):
 def GeneralCheck(self):
 self.GeneralCheckNonAcsii()
 self.UniCheck()
+self.GeneralCheckNoTab()
+self.GeneralCheckLineEnding()
+self.GeneralCheckTrailingWhiteSpaceLine()
+
+# Check whether NO Tab is used, replaced with spaces
+def GeneralCheckNoTab(self):
+if EccGlobalData.gConfig.GeneralCheckNoTab == '1' or 
EccGlobalData.gConfig.GeneralCheckAll == '1' or EccGlobalData.gConfig.CheckAll 
== '1':
+EdkLogger.quiet("Checking No TAB used in file ...")
+SqlCommand = """select ID, FullPath, ExtName from File where 
ExtName in ('.dec', '.inf', '.dsc', 'c', 'h')"""
+RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)
+for Record in RecordSet:
+if Record[2].upper() not in 
EccGlobalData.gConfig.BinaryExtList:
+op = open(Record[1]).readlines()
+IndexOfLine = 0
+for Line in op:
+IndexOfLine += 1
+IndexOfChar = 0
+for Char in Line:
+IndexOfChar += 1
+if Char == '\t':
+OtherMsg = "File %s has TAB char at line %s 
column %s" % (Record[1], IndexOfLine, IndexOfChar)
+
EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_NO_TAB, 
OtherMsg=OtherMsg, BelongsToTable='File', BelongsToItem=Record[0])
+
+# Check Only use CRLF (Carriage Return Line Feed) line endings.
+def GeneralCheckLineEnding(self):
+if EccGlobalData.gConfig.GeneralCheckLineEnding == '1' or 
EccGlobalData.gConfig.GeneralCheckAll == '1' or EccGlobalData.gConfig.CheckAll 
== '1':
+EdkLogger.quiet("Checking line ending in file ...")
+SqlCommand = """select ID, FullPath, ExtName from File where 
ExtName in ('.dec', '.inf', '.dsc', 'c', 'h')"""
+RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)
+for Record in RecordSet:
+if Record[2].upper() not in 
EccGlobalData.gConfig.BinaryExtList:
+op = open(Record[1], 'rb').readlines()
+IndexOfLine = 0
+for Line in op:
+IndexOfLine += 1
+if not Line.endswith('\r\n'):
+OtherMsg = "File %s has invalid line ending at 
line %s" % (Record[1], IndexOfLine)
+
EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_INVALID_LINE_ENDING, 
OtherMsg=OtherMsg, BelongsToTable='File', BelongsToItem=Record[0])
+
+# Check if there is no trailing white space in one line.
+def GeneralCheckTrailingWhiteSpaceLine(self):
+if EccGlobalData.gConfig.GeneralCheckTrailingWhiteSpaceLine == '1' or 
EccGlobalData.gConfig.GeneralCheckAll == '1' or EccGlobalData.gConfig.CheckAll 
== '1':
+EdkLogger.quiet("Checking trailing white space line in file ...")
+SqlCommand = """select ID, FullPath, ExtName from File where 
ExtName in ('.dec', '.inf', '.dsc', 'c', 'h')"""
+RecordSet = EccGlobalData.gDb.TblFile.Exec(SqlCommand)
+for Record in RecordSet:
+if Record[2].upper() not in 
EccGlobalData.gConfig.BinaryExtList:
+op = open(Record[1], 'rb').readlines()
+IndexOfLine = 0
+for Line in op:
+IndexOfLine += 1
+if Line.replace('\r', '').replace('\n', '').endswith(' 
'):
+OtherMsg = "File %s has trailing white spaces at 
line %s" % (Record[1], IndexOfLine)
+
EccGlobalData.gDb.TblReport.Insert(ERROR_GENERAL_CHECK_TRAILING_WHITE_SPACE_LINE,
 OtherMsg=OtherMsg, BelongsToTable='File', BelongsToItem=Record[0])
 
 # Check whether file has non ACSII char
 def GeneralCheckNonAcsii(self):
diff --git a/BaseTools/Source/Python/Ecc/Configuration.py 
b/BaseTools/Source/Python/Ecc/Configuration.py
index 29a1220761..f58adbf736 100644
--- a/BaseTools/Source/Python/Ecc/Configuration.py
+++ b/BaseTools/Source/Python/Ecc/Configuration.py
@@