1## @file 2# Inventory workspace's distribution package information. 3# 4# Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR> 5# 6# SPDX-License-Identifier: BSD-2-Clause-Patent 7# 8""" 9Inventory workspace's distribution package information. 10""" 11## 12# Import Modules 13# 14from sys import platform 15from traceback import format_exc 16from platform import python_version 17 18from Logger import StringTable as ST 19from Logger.ToolError import FatalError 20from Logger.ToolError import ABORT_ERROR 21from Logger.ToolError import CODE_ERROR 22import Logger.Log as Logger 23 24from Library import GlobalData 25 26## InventoryDistInstalled 27# 28# This method retrieves the installed distribution information from the internal UPT database 29# 30# @param DataBase: the UPT database 31# 32def InventoryDistInstalled(DataBase): 33 DistInstalled = DataBase.InventoryDistInstalled() 34 35 # 36 # find the max length for each item 37 # 38 DpNameStr = "DpName" 39 DpGuidStr = "DpGuid" 40 DpVerStr = "DpVer" 41 DpOriginalNameStr = "DpOriginalName" 42 MaxGuidlen = len(DpGuidStr) 43 MaxVerlen = len(DpVerStr) 44 MaxDpAliasFileNameLen = len(DpNameStr) 45 MaxDpOrigFileNamelen = len(DpOriginalNameStr) 46 47 for (DpGuid, DpVersion, DpOriginalName, DpAliasFileName) in DistInstalled: 48 MaxGuidlen = max(MaxGuidlen, len(DpGuid)) 49 MaxVerlen = max(MaxVerlen, len(DpVersion)) 50 MaxDpAliasFileNameLen = max(MaxDpAliasFileNameLen, len(DpAliasFileName)) 51 MaxDpOrigFileNamelen = max(MaxDpOrigFileNamelen, len(DpOriginalName)) 52 53 OutMsgFmt = "%-*s\t%-*s\t%-*s\t%-s" 54 OutMsg = OutMsgFmt % (MaxDpAliasFileNameLen, 55 DpNameStr, 56 MaxGuidlen, 57 DpGuidStr, 58 MaxVerlen, 59 DpVerStr, 60 DpOriginalNameStr) 61 Logger.Info(OutMsg) 62 63 for (DpGuid, DpVersion, DpFileName, DpAliasFileName) in DistInstalled: 64 OutMsg = OutMsgFmt % (MaxDpAliasFileNameLen, 65 DpAliasFileName, 66 MaxGuidlen, 67 DpGuid, 68 MaxVerlen, 69 DpVersion, 70 DpFileName) 71 Logger.Info(OutMsg) 72 73## Tool entrance method 74# 75# This method mainly dispatch specific methods per the command line options. 76# If no error found, return zero value so the caller of this tool can know 77# if it's executed successfully or not. 78# 79# @param Options: command Options 80# 81def Main(Options = None): 82 if Options: 83 pass 84 85 try: 86 DataBase = GlobalData.gDB 87 InventoryDistInstalled(DataBase) 88 ReturnCode = 0 89 except FatalError as XExcept: 90 ReturnCode = XExcept.args[0] 91 if Logger.GetLevel() <= Logger.DEBUG_9: 92 Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + format_exc()) 93 except KeyboardInterrupt: 94 ReturnCode = ABORT_ERROR 95 if Logger.GetLevel() <= Logger.DEBUG_9: 96 Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + format_exc()) 97 except: 98 ReturnCode = CODE_ERROR 99 Logger.Error("\nInventoryWs", 100 CODE_ERROR, 101 ST.ERR_UNKNOWN_FATAL_INVENTORYWS_ERR, 102 ExtraData=ST.MSG_SEARCH_FOR_HELP % ST.MSG_EDKII_MAIL_ADDR, 103 RaiseError=False 104 ) 105 Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), 106 platform) + format_exc()) 107 108 if ReturnCode == 0: 109 Logger.Quiet(ST.MSG_FINISH) 110 111 return ReturnCode 112