]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/Library/Misc.py
BaseTools/UPT:merge UPT Tool use Python2 and Python3
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Library / Misc.py
index 8c2a6787f0c16ef25cc13235e36e172c1b7b5cb7..d69b161420c2346cf39c0d34f9d1a7367df20dca 100644 (file)
@@ -32,7 +32,7 @@ from os import linesep
 from os import walk\r
 from os import environ\r
 import re\r
-from UserDict import IterableUserDict\r
+from collections import OrderedDict\r
 \r
 import Logger.Log as Logger\r
 from Logger import StringTable as ST\r
@@ -160,23 +160,35 @@ def RemoveDirectory(Directory, Recursively=False):
 #                              or not\r
 #\r
 def SaveFileOnChange(File, Content, IsBinaryFile=True):\r
-    if not IsBinaryFile:\r
-        Content = Content.replace("\n", linesep)\r
-\r
     if os.path.exists(File):\r
-        try:\r
-            if Content == __FileHookOpen__(File, "rb").read():\r
-                return False\r
-        except BaseException:\r
-            Logger.Error(None, ToolError.FILE_OPEN_FAILURE, ExtraData=File)\r
+        if IsBinaryFile:\r
+            try:\r
+                if Content == __FileHookOpen__(File, "rb").read():\r
+                    return False\r
+            except BaseException:\r
+                Logger.Error(None, ToolError.FILE_OPEN_FAILURE, ExtraData=File)\r
+        else:\r
+            try:\r
+                if Content == __FileHookOpen__(File, "r").read():\r
+                    return False\r
+            except BaseException:\r
+                Logger.Error(None, ToolError.FILE_OPEN_FAILURE, ExtraData=File)\r
 \r
     CreateDirectory(os.path.dirname(File))\r
-    try:\r
-        FileFd = __FileHookOpen__(File, "wb")\r
-        FileFd.write(Content)\r
-        FileFd.close()\r
-    except BaseException:\r
-        Logger.Error(None, ToolError.FILE_CREATE_FAILURE, ExtraData=File)\r
+    if IsBinaryFile:\r
+        try:\r
+            FileFd = __FileHookOpen__(File, "wb")\r
+            FileFd.write(Content)\r
+            FileFd.close()\r
+        except BaseException:\r
+            Logger.Error(None, ToolError.FILE_CREATE_FAILURE, ExtraData=File)\r
+    else:\r
+        try:\r
+            FileFd = __FileHookOpen__(File, "w")\r
+            FileFd.write(Content)\r
+            FileFd.close()\r
+        except BaseException:\r
+            Logger.Error(None, ToolError.FILE_CREATE_FAILURE, ExtraData=File)\r
 \r
     return True\r
 \r
@@ -288,148 +300,6 @@ def RealPath2(File, Dir='', OverrideDir=''):
 \r
     return None, None\r
 \r
-## A dict which can access its keys and/or values orderly\r
-#\r
-#  The class implements a new kind of dict which its keys or values can be\r
-#  accessed in the order they are added into the dict. It guarantees the order\r
-#  by making use of an internal list to keep a copy of keys.\r
-#\r
-class Sdict(IterableUserDict):\r
-    ## Constructor\r
-    #\r
-    def __init__(self):\r
-        IterableUserDict.__init__(self)\r
-        self._key_list = []\r
-\r
-    ## [] operator\r
-    #\r
-    def __setitem__(self, Key, Value):\r
-        if Key not in self._key_list:\r
-            self._key_list.append(Key)\r
-        IterableUserDict.__setitem__(self, Key, Value)\r
-\r
-    ## del operator\r
-    #\r
-    def __delitem__(self, Key):\r
-        self._key_list.remove(Key)\r
-        IterableUserDict.__delitem__(self, Key)\r
-\r
-    ## used in "for k in dict" loop to ensure the correct order\r
-    #\r
-    def __iter__(self):\r
-        return self.iterkeys()\r
-\r
-    ## len() support\r
-    #\r
-    def __len__(self):\r
-        return len(self._key_list)\r
-\r
-    ## "in" test support\r
-    #\r
-    def __contains__(self, Key):\r
-        return Key in self._key_list\r
-\r
-    ## indexof support\r
-    #\r
-    def index(self, Key):\r
-        return self._key_list.index(Key)\r
-\r
-    ## insert support\r
-    #\r
-    def insert(self, Key, Newkey, Newvalue, Order):\r
-        Index = self._key_list.index(Key)\r
-        if Order == 'BEFORE':\r
-            self._key_list.insert(Index, Newkey)\r
-            IterableUserDict.__setitem__(self, Newkey, Newvalue)\r
-        elif Order == 'AFTER':\r
-            self._key_list.insert(Index + 1, Newkey)\r
-            IterableUserDict.__setitem__(self, Newkey, Newvalue)\r
-\r
-    ## append support\r
-    #\r
-    def append(self, Sdict2):\r
-        for Key in Sdict2:\r
-            if Key not in self._key_list:\r
-                self._key_list.append(Key)\r
-            IterableUserDict.__setitem__(self, Key, Sdict2[Key])\r
-    ## hash key\r
-    #\r
-    def has_key(self, Key):\r
-        return Key in self._key_list\r
-\r
-    ## Empty the dict\r
-    #\r
-    def clear(self):\r
-        self._key_list = []\r
-        IterableUserDict.clear(self)\r
-\r
-    ## Return a copy of keys\r
-    #\r
-    def keys(self):\r
-        Keys = []\r
-        for Key in self._key_list:\r
-            Keys.append(Key)\r
-        return Keys\r
-\r
-    ## Return a copy of values\r
-    #\r
-    def values(self):\r
-        Values = []\r
-        for Key in self._key_list:\r
-            Values.append(self[Key])\r
-        return Values\r
-\r
-    ## Return a copy of (key, value) list\r
-    #\r
-    def items(self):\r
-        Items = []\r
-        for Key in self._key_list:\r
-            Items.append((Key, self[Key]))\r
-        return Items\r
-\r
-    ## Iteration support\r
-    #\r
-    def iteritems(self):\r
-        return iter(self.items())\r
-\r
-    ## Keys interation support\r
-    #\r
-    def iterkeys(self):\r
-        return iter(self.keys())\r
-\r
-    ## Values interation support\r
-    #\r
-    def itervalues(self):\r
-        return iter(self.values())\r
-\r
-    ## Return value related to a key, and remove the (key, value) from the dict\r
-    #\r
-    def pop(self, Key, *Dv):\r
-        Value = None\r
-        if Key in self._key_list:\r
-            Value = self[Key]\r
-            self.__delitem__(Key)\r
-        elif len(Dv) != 0 :\r
-            Value = Dv[0]\r
-        return Value\r
-\r
-    ## Return (key, value) pair, and remove the (key, value) from the dict\r
-    #\r
-    def popitem(self):\r
-        Key = self._key_list[-1]\r
-        Value = self[Key]\r
-        self.__delitem__(Key)\r
-        return Key, Value\r
-    ## update method\r
-    #\r
-    def update(self, Dict=None, **Kwargs):\r
-        if Dict is not None:\r
-            for Key1, Val1 in Dict.items():\r
-                self[Key1] = Val1\r
-        if len(Kwargs):\r
-            for Key1, Val1 in Kwargs.items():\r
-                self[Key1] = Val1\r
-\r
 ## CommonPath\r
 #\r
 # @param PathList: PathList\r
@@ -437,7 +307,7 @@ class Sdict(IterableUserDict):
 def CommonPath(PathList):\r
     Path1 = min(PathList).split(os.path.sep)\r
     Path2 = max(PathList).split(os.path.sep)\r
-    for Index in xrange(min(len(Path1), len(Path2))):\r
+    for Index in range(min(len(Path1), len(Path2))):\r
         if Path1[Index] != Path2[Index]:\r
             return os.path.sep.join(Path1[:Index])\r
     return os.path.sep.join(Path1)\r
@@ -890,7 +760,7 @@ def ProcessEdkComment(LineList):
             if FindEdkBlockComment:\r
                 if FirstPos == -1:\r
                     FirstPos = StartPos\r
-                for Index in xrange(StartPos, EndPos+1):\r
+                for Index in range(StartPos, EndPos+1):\r
                     LineList[Index] = ''\r
                 FindEdkBlockComment = False\r
         elif Line.find("//") != -1 and not Line.startswith("#"):\r
@@ -957,7 +827,7 @@ def GetLibInstanceInfo(String, WorkSpace, LineNo):
         FileLinesList = []\r
 \r
         try:\r
-            FInputfile = open(FullFileName, "rb", 0)\r
+            FInputfile = open(FullFileName, "r")\r
             try:\r
                 FileLinesList = FInputfile.readlines()\r
             except BaseException:\r