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
# 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
\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
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
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
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