]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/UPT.py
BaseTools: Replace StandardError with Expression
[mirror_edk2.git] / BaseTools / Source / Python / UPT / UPT.py
index 8ad0f2638fd936c3ab01a101018eea19036cfe16..0e425828cdfe4cfefa63310bd4363aa3c9b65b85 100644 (file)
@@ -2,7 +2,7 @@
 #\r
 # This file is the main entry for UPT \r
 #\r
-# Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>\r
 #\r
 # This program and the accompanying materials are licensed and made available \r
 # under the terms and conditions of the BSD License which accompanies this \r
@@ -19,8 +19,13 @@ UPT
 \r
 ## import modules\r
 #\r
-from Core import FileHook\r
+import locale\r
 import sys\r
+encoding = locale.getdefaultlocale()[1]\r
+if encoding:\r
+    reload(sys)\r
+    sys.setdefaultencoding(encoding)\r
+from Core import FileHook\r
 import os.path\r
 from sys import platform\r
 import platform as pf\r
@@ -38,24 +43,20 @@ from Logger.ToolError import OPTION_MISSING
 from Logger.ToolError import FILE_TYPE_MISMATCH\r
 from Logger.ToolError import OPTION_CONFLICT\r
 from Logger.ToolError import FatalError\r
+from Logger.ToolError import UPT_ALREADY_INSTALLED_ERROR\r
+from Common.MultipleWorkspace import MultipleWorkspace as mws\r
 \r
 import MkPkg\r
 import InstallPkg\r
 import RmPkg\r
 import InventoryWs\r
 import ReplacePkg\r
+import TestInstall\r
 from Library.Misc import GetWorkspace\r
 from Library import GlobalData\r
 from Core.IpiDb import IpiDatabase\r
 from BuildVersion import gBUILD_VERSION\r
 \r
-##\r
-# Version and Copyright\r
-#\r
-#VersionNumber = "1.0"\r
-#__version__ = "Revision " + VersionNumber\r
-#__copyright__ = "Copyright (c) 2011 Intel Corporation All Rights Reserved."\r
-\r
 ## CheckConflictOption\r
 #\r
 # CheckConflictOption\r
@@ -74,6 +75,9 @@ def CheckConflictOption(Opt):
         Logger.Error("UPT", OPTION_CONFLICT, ExtraData=ST.ERR_I_R_EXCLUSIVE)\r
     elif Opt.PackFileToCreate and  Opt.PackFileToRemove:\r
         Logger.Error("UPT", OPTION_CONFLICT, ExtraData=ST.ERR_C_R_EXCLUSIVE)\r
+    elif Opt.TestDistFiles and (Opt.PackFileToCreate or Opt.PackFileToInstall \\r
+                                or Opt.PackFileToRemove or Opt.PackFileToReplace):\r
+        Logger.Error("UPT", OPTION_CONFLICT, ExtraData=ST.ERR_C_R_EXCLUSIVE)\r
 \r
     if Opt.CustomPath and Opt.UseGuidedPkgPath:\r
         Logger.Warn("UPT", ST.WARN_CUSTOMPATH_OVERRIDE_USEGUIDEDPATH)\r
@@ -86,7 +90,7 @@ def SetLogLevel(Opt):
         Logger.SetLevel(Logger.VERBOSE)\r
     elif Opt.opt_quiet:\r
         Logger.SetLevel(Logger.QUIET + 1)\r
-    elif Opt.debug_level != None:\r
+    elif Opt.debug_level is not None:\r
         if Opt.debug_level < 0 or Opt.debug_level > 9:\r
             Logger.Warn("UPT", ST.ERR_DEBUG_LEVEL)\r
             Logger.SetLevel(Logger.INFO)\r
@@ -104,7 +108,7 @@ def SetLogLevel(Opt):
 def Main():\r
     Logger.Initialize()\r
 \r
-    Parser = OptionParser(version=(MSG_VERSION + ' ' + gBUILD_VERSION), description=MSG_DESCRIPTION,\r
+    Parser = OptionParser(version=(MSG_VERSION + ' Build ' + gBUILD_VERSION), description=MSG_DESCRIPTION,\r
                           prog="UPT.exe", usage=MSG_USAGE)\r
 \r
     Parser.add_option("-d", "--debug", action="store", type="int", dest="debug_level", help=ST.HLP_PRINT_DEBUG_INFO)\r
@@ -116,7 +120,7 @@ def Main():
 \r
     Parser.add_option("-q", "--quiet", action="store_true", dest="opt_quiet", help=ST.HLP_RETURN_AND_DISPLAY)\r
 \r
-    Parser.add_option("-i", "--install", action="store", type="string", dest="Install_Distribution_Package_File",\r
+    Parser.add_option("-i", "--install", action="append", type="string", dest="Install_Distribution_Package_File",\r
                       help=ST.HLP_SPECIFY_PACKAGE_NAME_INSTALL)\r
 \r
     Parser.add_option("-c", "--create", action="store", type="string", dest="Create_Distribution_Package_File",\r
@@ -151,6 +155,9 @@ def Main():
 \r
     Parser.add_option("--use-guided-paths", action="store_true", dest="Use_Guided_Paths", help=ST.HLP_USE_GUIDED_PATHS)\r
 \r
+    Parser.add_option("-j", "--test-install", action="append", type="string",\r
+                      dest="Test_Install_Distribution_Package_Files", help=ST.HLP_TEST_INSTALL)\r
+\r
     Opt = Parser.parse_args()[0]\r
 \r
     Var2Var = [\r
@@ -164,27 +171,29 @@ def Main():
         ("PackFileToReplace", Opt.Replace_Distribution_Package_File),\r
         ("PackFileToBeReplaced", Opt.Original_Distribution_Package_File),\r
         ("UseGuidedPkgPath", Opt.Use_Guided_Paths),\r
+        ("TestDistFiles", Opt.Test_Install_Distribution_Package_Files)\r
     ]\r
 \r
     for Var in Var2Var:\r
         setattr(Opt, Var[0], Var[1])\r
 \r
     try:\r
-        GlobalData.gWORKSPACE = GetWorkspace()\r
-    except FatalError, XExcept:\r
+        GlobalData.gWORKSPACE, GlobalData.gPACKAGE_PATH = GetWorkspace()\r
+    except FatalError as XExcept:\r
         if Logger.GetLevel() <= Logger.DEBUG_9:\r
             Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + format_exc())\r
         return XExcept.args[0]\r
 \r
-    # Start *********************************************\r
     # Support WORKSPACE is a long path\r
-    # Only work well on windows\r
-    # Linux Solution TBD\r
+    # Only works for windows system\r
     if pf.system() == 'Windows':\r
-        os.system('@echo off\nsubst b: /D')\r
-        os.system('subst b: "%s"' % GlobalData.gWORKSPACE)\r
-        GlobalData.gWORKSPACE = 'B:\\'\r
-    # End ***********************************************\r
+        Vol = 'B:'\r
+        for Index in range(90, 65, -1):\r
+            Vol = chr(Index) + ':'\r
+            if not os.path.isdir(Vol):\r
+                os.system('subst %s "%s"' % (Vol, GlobalData.gWORKSPACE))\r
+                break\r
+        GlobalData.gWORKSPACE = '%s\\' % Vol\r
 \r
     WorkspaceDir = GlobalData.gWORKSPACE\r
 \r
@@ -219,12 +228,14 @@ def Main():
             RunModule = MkPkg.Main\r
 \r
         elif Opt.PackFileToInstall:\r
-            if not Opt.PackFileToInstall.endswith('.dist'):\r
-                Logger.Error("InstallPkg", FILE_TYPE_MISMATCH, ExtraData=ST.ERR_DIST_EXT_ERROR % Opt.PackFileToInstall)\r
+            AbsPath = []\r
+            for Item in Opt.PackFileToInstall:\r
+                if not Item.endswith('.dist'):\r
+                    Logger.Error("InstallPkg", FILE_TYPE_MISMATCH, ExtraData=ST.ERR_DIST_EXT_ERROR % Item)\r
 \r
-            AbsPath = GetFullPathDist(Opt.PackFileToInstall, WorkspaceDir)\r
-            if not AbsPath:\r
-                Logger.Error("InstallPkg", FILE_NOT_FOUND, ST.ERR_INSTALL_DIST_NOT_FOUND % Opt.PackFileToInstall)\r
+                AbsPath.append(GetFullPathDist(Item, WorkspaceDir))\r
+                if not AbsPath:\r
+                    Logger.Error("InstallPkg", FILE_NOT_FOUND, ST.ERR_INSTALL_DIST_NOT_FOUND % Item)\r
 \r
             Opt.PackFileToInstall = AbsPath\r
             setattr(Opt, 'PackageFile', Opt.PackFileToInstall)\r
@@ -270,19 +281,27 @@ def Main():
             Opt.PackFileToReplace = AbsPath\r
             RunModule = ReplacePkg.Main\r
 \r
+        elif Opt.Test_Install_Distribution_Package_Files:\r
+            for Dist in Opt.Test_Install_Distribution_Package_Files:\r
+                if not Dist.endswith('.dist'):\r
+                    Logger.Error("TestInstall", FILE_TYPE_MISMATCH, ExtraData=ST.ERR_DIST_EXT_ERROR % Dist)\r
+\r
+            setattr(Opt, 'DistFiles', Opt.Test_Install_Distribution_Package_Files)\r
+            RunModule = TestInstall.Main\r
+\r
         else:\r
             Parser.print_usage()\r
             return OPTION_MISSING\r
 \r
         ReturnCode = RunModule(Opt)\r
-    except FatalError, XExcept:\r
+    except FatalError as XExcept:\r
         ReturnCode = XExcept.args[0]\r
         if Logger.GetLevel() <= Logger.DEBUG_9:\r
             Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + \\r
                          format_exc())\r
     finally:\r
         try:\r
-            if ReturnCode != 0:\r
+            if ReturnCode != 0 and ReturnCode != UPT_ALREADY_INSTALLED_ERROR:\r
                 Logger.Quiet(ST.MSG_RECOVER_START)\r
                 GlobalData.gDB.RollBack()\r
                 Mgr.rollback()\r
@@ -290,11 +309,12 @@ def Main():
             else:\r
                 GlobalData.gDB.Commit()\r
                 Mgr.commit()\r
-        except StandardError:\r
+        except Exception:\r
             Logger.Quiet(ST.MSG_RECOVER_FAIL)\r
         GlobalData.gDB.CloseDb()\r
+\r
         if pf.system() == 'Windows':\r
-            os.system('subst b: /D')\r
+            os.system('subst %s /D' % GlobalData.gWORKSPACE.replace('\\',''))\r
 \r
     return ReturnCode\r
 \r