public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [patch] BaseTool/Upt: Avoid UNI file name conflict
@ 2016-07-29  6:09 hesschen
  2016-08-02  4:04 ` Zhu, Yonghong
  0 siblings, 1 reply; 2+ messages in thread
From: hesschen @ 2016-07-29  6:09 UTC (permalink / raw)
  To: edk2-devel

When creating a UNI file if there is a name conflict, add an index from 0 to the file name

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: hesschen <hesheng.chen@intel.com>
---
 .../Source/Python/UPT/GenMetaFile/GenDecFile.py    |  5 +++--
 .../Source/Python/UPT/GenMetaFile/GenInfFile.py    |  7 +++---
 BaseTools/Source/Python/UPT/Library/String.py      | 26 +++++++++++++++++++++-
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py b/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
index 31abd23..d39c182 100644
--- a/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
+++ b/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
@@ -65,6 +65,7 @@ from Library.DataType import TAB_SECTION_END
 from Library.DataType import TAB_SPLIT
 import Library.DataType as DT
 from Library.UniClassObject import FormatUniEntry
+from Library.String import GetUniFileName
 
 def GenPcd(Package, Content):
     #
@@ -586,9 +587,9 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO
         
     if not os.path.exists(os.path.dirname(PackageObject.GetFullPath())):
         os.makedirs(os.path.dirname(PackageObject.GetFullPath()))
-    ContainerFile = os.path.normpath(os.path.join(os.path.dirname(PackageObject.GetFullPath()), 
-                                                  (PackageObject.GetBaseName() + '.uni')))
     
+    ContainerFile = GetUniFileName(os.path.dirname(PackageObject.GetFullPath()), PackageObject.GetBaseName())
+
     Content = UniFileHeader + '\r\n'
     Content += '\r\n'
     
diff --git a/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py b/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py
index a131f98..c1362e6 100644
--- a/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py
+++ b/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py
@@ -2,7 +2,7 @@
 #
 # This file contained the logical of transfer package object to INF files.
 #
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
 #
 # This program and the accompanying materials are licensed and made available 
 # under the terms and conditions of the BSD License which accompanies this 
@@ -41,6 +41,7 @@ import Logger.Log as Logger
 from Library import DataType as DT
 from GenMetaFile import GenMetaFileMisc
 from Library.UniClassObject import FormatUniEntry
+from Library.String import GetUniFileName
 
 
 ## Transfer Module Object to Inf files
@@ -225,8 +226,8 @@ def GenModuleUNIEncodeFile(ModuleObject, UniFileHeader='', Encoding=DT.TAB_ENCOD
         return
     else:
         ModuleObject.UNIFlag = True
-    ContainerFile = os.path.normpath(os.path.join(os.path.dirname(ModuleObject.GetFullPath()),
-                                                  (ModuleObject.GetBaseName() + '.uni')))
+    ContainerFile = GetUniFileName(os.path.dirname(ModuleObject.GetFullPath()), ModuleObject.GetBaseName())
+
     if not os.path.exists(os.path.dirname(ModuleObject.GetFullPath())):
         os.makedirs(os.path.dirname(ModuleObject.GetFullPath()))
 
diff --git a/BaseTools/Source/Python/UPT/Library/String.py b/BaseTools/Source/Python/UPT/Library/String.py
index 37ce141..05b5fb1 100644
--- a/BaseTools/Source/Python/UPT/Library/String.py
+++ b/BaseTools/Source/Python/UPT/Library/String.py
@@ -2,7 +2,7 @@
 # This file is used to define common string related functions used in parsing
 # process
 #
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
 #
 # This program and the accompanying materials are licensed and made available
 # under the terms and conditions of the BSD License which accompanies this
@@ -957,3 +957,27 @@ def IsMatchArch(Arch1, Arch2):
                     return True
 
     return False
+
+# Search all files in FilePath to find the FileName with the largest index
+# Return the FileName with index +1 under the FilePath
+#
+def GetUniFileName(FilePath, FileName):
+    Files = os.listdir(FilePath)
+    LargestIndex = -1
+    for File in Files:
+        if File.upper().startswith(FileName.upper()) and File.upper().endswith('.UNI'):
+            Index = File.upper().replace(FileName.upper(), '').replace('.UNI', '')
+            if Index:
+                try:
+                    Index = int(Index)
+                except Exception:
+                    Index = -1
+            else:
+                Index = 0
+            if Index > LargestIndex:
+                LargestIndex = Index + 1
+
+    if LargestIndex > -1:
+        return os.path.normpath(os.path.join(FilePath, FileName + str(LargestIndex) + '.uni'))
+    else:
+        return os.path.normpath(os.path.join(FilePath, FileName + '.uni'))
-- 
2.7.2.windows.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [patch] BaseTool/Upt: Avoid UNI file name conflict
  2016-07-29  6:09 [patch] BaseTool/Upt: Avoid UNI file name conflict hesschen
@ 2016-08-02  4:04 ` Zhu, Yonghong
  0 siblings, 0 replies; 2+ messages in thread
From: Zhu, Yonghong @ 2016-08-02  4:04 UTC (permalink / raw)
  To: Chen, Hesheng, edk2-devel@lists.01.org

Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com> 

Best Regards,
Zhu Yonghong


-----Original Message-----
From: Chen, Hesheng 
Sent: Friday, July 29, 2016 2:09 PM
To: edk2-devel@lists.01.org
Cc: Zhu, Yonghong <yonghong.zhu@intel.com>
Subject: [patch] BaseTool/Upt: Avoid UNI file name conflict

When creating a UNI file if there is a name conflict, add an index from 0 to the file name

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: hesschen <hesheng.chen@intel.com>
---
 .../Source/Python/UPT/GenMetaFile/GenDecFile.py    |  5 +++--
 .../Source/Python/UPT/GenMetaFile/GenInfFile.py    |  7 +++---
 BaseTools/Source/Python/UPT/Library/String.py      | 26 +++++++++++++++++++++-
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py b/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
index 31abd23..d39c182 100644
--- a/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
+++ b/BaseTools/Source/Python/UPT/GenMetaFile/GenDecFile.py
@@ -65,6 +65,7 @@ from Library.DataType import TAB_SECTION_END  from Library.DataType import TAB_SPLIT  import Library.DataType as DT  from Library.UniClassObject import FormatUniEntry
+from Library.String import GetUniFileName
 
 def GenPcd(Package, Content):
     #
@@ -586,9 +587,9 @@ def GenPackageUNIEncodeFile(PackageObject, UniFileHeader = '', Encoding=TAB_ENCO
         
     if not os.path.exists(os.path.dirname(PackageObject.GetFullPath())):
         os.makedirs(os.path.dirname(PackageObject.GetFullPath()))
-    ContainerFile = os.path.normpath(os.path.join(os.path.dirname(PackageObject.GetFullPath()), 
-                                                  (PackageObject.GetBaseName() + '.uni')))
     
+    ContainerFile = 
+ GetUniFileName(os.path.dirname(PackageObject.GetFullPath()), 
+ PackageObject.GetBaseName())
+
     Content = UniFileHeader + '\r\n'
     Content += '\r\n'
     
diff --git a/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py b/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py
index a131f98..c1362e6 100644
--- a/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py
+++ b/BaseTools/Source/Python/UPT/GenMetaFile/GenInfFile.py
@@ -2,7 +2,7 @@
 #
 # This file contained the logical of transfer package object to INF files.
 #
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2011 - 2016, Intel Corporation. All rights 
+reserved.<BR>
 #
 # This program and the accompanying materials are licensed and made available  # under the terms and conditions of the BSD License which accompanies this @@ -41,6 +41,7 @@ import Logger.Log as Logger  from Library import DataType as DT  from GenMetaFile import GenMetaFileMisc  from Library.UniClassObject import FormatUniEntry
+from Library.String import GetUniFileName
 
 
 ## Transfer Module Object to Inf files
@@ -225,8 +226,8 @@ def GenModuleUNIEncodeFile(ModuleObject, UniFileHeader='', Encoding=DT.TAB_ENCOD
         return
     else:
         ModuleObject.UNIFlag = True
-    ContainerFile = os.path.normpath(os.path.join(os.path.dirname(ModuleObject.GetFullPath()),
-                                                  (ModuleObject.GetBaseName() + '.uni')))
+    ContainerFile = GetUniFileName(os.path.dirname(ModuleObject.GetFullPath()), ModuleObject.GetBaseName())
+
     if not os.path.exists(os.path.dirname(ModuleObject.GetFullPath())):
         os.makedirs(os.path.dirname(ModuleObject.GetFullPath()))
 
diff --git a/BaseTools/Source/Python/UPT/Library/String.py b/BaseTools/Source/Python/UPT/Library/String.py
index 37ce141..05b5fb1 100644
--- a/BaseTools/Source/Python/UPT/Library/String.py
+++ b/BaseTools/Source/Python/UPT/Library/String.py
@@ -2,7 +2,7 @@
 # This file is used to define common string related functions used in parsing
 # process
 #
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.<BR>
 #
 # This program and the accompanying materials are licensed and made available
 # under the terms and conditions of the BSD License which accompanies this
@@ -957,3 +957,27 @@ def IsMatchArch(Arch1, Arch2):
                     return True
 
     return False
+
+# Search all files in FilePath to find the FileName with the largest index
+# Return the FileName with index +1 under the FilePath
+#
+def GetUniFileName(FilePath, FileName):
+    Files = os.listdir(FilePath)
+    LargestIndex = -1
+    for File in Files:
+        if File.upper().startswith(FileName.upper()) and File.upper().endswith('.UNI'):
+            Index = File.upper().replace(FileName.upper(), '').replace('.UNI', '')
+            if Index:
+                try:
+                    Index = int(Index)
+                except Exception:
+                    Index = -1
+            else:
+                Index = 0
+            if Index > LargestIndex:
+                LargestIndex = Index + 1
+
+    if LargestIndex > -1:
+        return os.path.normpath(os.path.join(FilePath, FileName + str(LargestIndex) + '.uni'))
+    else:
+        return os.path.normpath(os.path.join(FilePath, FileName + '.uni'))
-- 
2.7.2.windows.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-08-02  4:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-29  6:09 [patch] BaseTool/Upt: Avoid UNI file name conflict hesschen
2016-08-02  4:04 ` Zhu, Yonghong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox