From 6e3789d7424660b14ef3d7123221c97db5d8aff5 Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Wed, 25 Apr 2018 17:24:58 +0800 Subject: Remove unused files Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Guo Mang --- BaseTools/Source/Python/UPT/InstallPkg.py | 969 ------------------------------ 1 file changed, 969 deletions(-) delete mode 100644 BaseTools/Source/Python/UPT/InstallPkg.py (limited to 'BaseTools/Source/Python/UPT/InstallPkg.py') diff --git a/BaseTools/Source/Python/UPT/InstallPkg.py b/BaseTools/Source/Python/UPT/InstallPkg.py deleted file mode 100644 index 0e99d2f01f..0000000000 --- a/BaseTools/Source/Python/UPT/InstallPkg.py +++ /dev/null @@ -1,969 +0,0 @@ -## @file -# Install distribution package. -# -# Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.
-# -# This program and the accompanying materials are licensed and made available -# under the terms and conditions of the BSD License which accompanies this -# distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -""" -Install a distribution package -""" -## -# Import Modules -# -from Core.FileHook import __FileHookOpen__ -import os.path -from os import chmod -from os import SEEK_SET -from os import SEEK_END -import stat -import md5 -import copy -from sys import stdin -from sys import platform -from shutil import rmtree -from shutil import copyfile -from traceback import format_exc -from platform import python_version - -from Logger import StringTable as ST -from Logger.ToolError import UNKNOWN_ERROR -from Logger.ToolError import FILE_UNKNOWN_ERROR -from Logger.ToolError import OPTION_MISSING -from Logger.ToolError import UPT_ALREADY_INSTALLED_ERROR -from Logger.ToolError import FatalError -from Logger.ToolError import ABORT_ERROR -from Logger.ToolError import CODE_ERROR -from Logger.ToolError import FORMAT_INVALID -from Logger.ToolError import FILE_TYPE_MISMATCH -import Logger.Log as Logger - -from Library.Misc import Sdict -from Library.Misc import ConvertPath -from Library.ParserValidate import IsValidInstallPath -from Xml.XmlParser import DistributionPackageXml -from GenMetaFile.GenDecFile import PackageToDec -from GenMetaFile.GenInfFile import ModuleToInf -from Core.PackageFile import PackageFile -from Core.PackageFile import FILE_NOT_FOUND -from Core.PackageFile import FILE_CHECKSUM_FAILURE -from Core.PackageFile import CreateDirectory -from Core.DependencyRules import DependencyRules -from Library import GlobalData - -## InstallNewPackage -# -# @param WorkspaceDir: Workspace Directory -# @param Path: Package Path -# @param CustomPath: whether need to customize path at first -# -def InstallNewPackage(WorkspaceDir, Path, CustomPath = False): - if os.path.isabs(Path): - Logger.Info(ST.MSG_RELATIVE_PATH_ONLY%Path) - elif CustomPath: - Logger.Info(ST.MSG_NEW_PKG_PATH) - else: - Path = ConvertPath(Path) - Path = os.path.normpath(Path) - FullPath = os.path.normpath(os.path.join(WorkspaceDir, Path)) - if os.path.exists(FullPath): - Logger.Info(ST.ERR_DIR_ALREADY_EXIST%FullPath) - else: - return Path - - Input = stdin.readline() - Input = Input.replace('\r', '').replace('\n', '') - if Input == '': - Logger.Error("InstallPkg", UNKNOWN_ERROR, ST.ERR_USER_INTERRUPT) - Input = Input.replace('\r', '').replace('\n', '') - return InstallNewPackage(WorkspaceDir, Input, False) - -## InstallNewModule -# -# @param WorkspaceDir: Workspace Directory -# @param Path: Standalone Module Path -# @param PathList: The already installed standalone module Path list -# -def InstallNewModule(WorkspaceDir, Path, PathList = None): - if PathList == None: - PathList = [] - Path = ConvertPath(Path) - Path = os.path.normpath(Path) - FullPath = os.path.normpath(os.path.join(WorkspaceDir, Path)) - if os.path.exists(FullPath) and FullPath not in PathList: - Logger.Info(ST.ERR_DIR_ALREADY_EXIST%Path) - elif Path == FullPath: - Logger.Info(ST.MSG_RELATIVE_PATH_ONLY%FullPath) - else: - return Path - - Input = stdin.readline() - Input = Input.replace('\r', '').replace('\n', '') - if Input == '': - Logger.Error("InstallPkg", UNKNOWN_ERROR, ST.ERR_USER_INTERRUPT) - Input = Input.replace('\r', '').replace('\n', '') - return InstallNewModule(WorkspaceDir, Input, PathList) - - -## InstallNewFile -# -# @param WorkspaceDir: Workspace Direction -# @param File: File -# -def InstallNewFile(WorkspaceDir, File): - FullPath = os.path.normpath(os.path.join(WorkspaceDir, File)) - if os.path.exists(FullPath): - Logger.Info(ST.ERR_FILE_ALREADY_EXIST %File) - Input = stdin.readline() - Input = Input.replace('\r', '').replace('\n', '') - if Input == '': - Logger.Error("InstallPkg", UNKNOWN_ERROR, ST.ERR_USER_INTERRUPT) - Input = Input.replace('\r', '').replace('\n', '') - return InstallNewFile(WorkspaceDir, Input) - else: - return File - -## UnZipDp -# -# UnZipDp -# -def UnZipDp(WorkspaceDir, DpPkgFileName): - ContentZipFile = None - Logger.Quiet(ST.MSG_UZIP_PARSE_XML) - DistFile = PackageFile(DpPkgFileName) - - DpDescFileName, ContentFileName = GetDPFile(DistFile.GetZipFile()) - - GlobalData.gUNPACK_DIR = os.path.normpath(os.path.join(WorkspaceDir, ".tmp")) - DistPkgFile = DistFile.UnpackFile(DpDescFileName, - os.path.normpath(os.path.join(GlobalData.gUNPACK_DIR, DpDescFileName))) - if not DistPkgFile: - Logger.Error("InstallPkg", FILE_NOT_FOUND, ST.ERR_FILE_BROKEN %DpDescFileName) - - # - # Generate distpkg - # - DistPkgObj = DistributionPackageXml() - DistPkg = DistPkgObj.FromXml(DistPkgFile) - if DistPkg.Header.RePackage == '': - DistPkg.Header.RePackage = False - if DistPkg.Header.ReadOnly == '': - DistPkg.Header.ReadOnly = False - - # - # unzip contents.zip file - # - ContentFile = DistFile.UnpackFile(ContentFileName, - os.path.normpath(os.path.join(GlobalData.gUNPACK_DIR, ContentFileName))) - if not ContentFile: - Logger.Error("InstallPkg", FILE_NOT_FOUND, - ST.ERR_FILE_BROKEN % ContentFileName) - - FilePointer = __FileHookOpen__(ContentFile, "rb") - # - # Assume no archive comment. - # - FilePointer.seek(0, SEEK_SET) - FilePointer.seek(0, SEEK_END) - # - # Get file size - # - FileSize = FilePointer.tell() - FilePointer.close() - - if FileSize != 0: - ContentZipFile = PackageFile(ContentFile) - - # - # verify MD5 signature when existed - # - if DistPkg.Header.Signature != '': - Md5Sigature = md5.new(__FileHookOpen__(ContentFile, 'rb').read()) - if DistPkg.Header.Signature != Md5Sigature.hexdigest(): - ContentZipFile.Close() - Logger.Error("InstallPkg", FILE_CHECKSUM_FAILURE, - ExtraData=ContentFile) - - return DistPkg, ContentZipFile, DpPkgFileName, DistFile - -## GetPackageList -# -# GetPackageList -# -def GetPackageList(DistPkg, Dep, WorkspaceDir, Options, ContentZipFile, ModuleList, PackageList): - NewDict = Sdict() - for Guid, Version, Path in DistPkg.PackageSurfaceArea: - PackagePath = Path - Package = DistPkg.PackageSurfaceArea[Guid, Version, Path] - Logger.Info(ST.MSG_INSTALL_PACKAGE % Package.GetName()) - if Dep.CheckPackageExists(Guid, Version): - Logger.Info(ST.WRN_PACKAGE_EXISTED %(Guid, Version)) - if Options.UseGuidedPkgPath: - GuidedPkgPath = "%s_%s_%s" % (Package.GetName(), Guid, Version) - NewPackagePath = InstallNewPackage(WorkspaceDir, GuidedPkgPath, Options.CustomPath) - else: - NewPackagePath = InstallNewPackage(WorkspaceDir, PackagePath, Options.CustomPath) - InstallPackageContent(PackagePath, NewPackagePath, Package, ContentZipFile, Dep, WorkspaceDir, ModuleList, - DistPkg.Header.ReadOnly) - PackageList.append(Package) - - NewDict[Guid, Version, Package.GetPackagePath()] = Package - - # - # Now generate meta-data files, first generate all dec for package - # dec should be generated before inf, and inf should be generated after - # all packages installed, else hard to resolve modules' package - # dependency (Hard to get the location of the newly installed package) - # - for Package in PackageList: - FilePath = PackageToDec(Package, DistPkg.Header) - Md5Sigature = md5.new(__FileHookOpen__(str(FilePath), 'rb').read()) - Md5Sum = Md5Sigature.hexdigest() - if (FilePath, Md5Sum) not in Package.FileList: - Package.FileList.append((FilePath, Md5Sum)) - - return NewDict - -## GetModuleList -# -# GetModuleList -# -def GetModuleList(DistPkg, Dep, WorkspaceDir, ContentZipFile, ModuleList): - # - # ModulePathList will keep track of the standalone module path that - # we just installed. If a new module's path in that list - # (only multiple INF in one directory will be so), we will - # install them directly. If not, we will try to create a new directory - # for it. - # - ModulePathList = [] - - # - # Check module exist and install - # - Module = None - NewDict = Sdict() - for Guid, Version, Name, Path in DistPkg.ModuleSurfaceArea: - ModulePath = Path - Module = DistPkg.ModuleSurfaceArea[Guid, Version, Name, Path] - Logger.Info(ST.MSG_INSTALL_MODULE % Module.GetName()) - if Dep.CheckModuleExists(Guid, Version, Name, Path): - Logger.Quiet(ST.WRN_MODULE_EXISTED %Path) - # - # here check for the multiple inf share the same module path cases: - # they should be installed into the same directory - # - ModuleFullPath = \ - os.path.normpath(os.path.join(WorkspaceDir, ModulePath)) - if ModuleFullPath not in ModulePathList: - NewModulePath = InstallNewModule(WorkspaceDir, ModulePath, ModulePathList) - NewModuleFullPath = os.path.normpath(os.path.join(WorkspaceDir, NewModulePath)) - ModulePathList.append(NewModuleFullPath) - else: - NewModulePath = ModulePath - - InstallModuleContent(ModulePath, NewModulePath, '', Module, ContentZipFile, WorkspaceDir, ModuleList, None, - DistPkg.Header.ReadOnly) - # - # Update module - # - Module.SetModulePath(Module.GetModulePath().replace(Path, NewModulePath, 1)) - - NewDict[Guid, Version, Name, Module.GetModulePath()] = Module - - # - # generate all inf for modules - # - for (Module, Package) in ModuleList: - CheckCNameInModuleRedefined(Module, DistPkg) - FilePath = ModuleToInf(Module, Package, DistPkg.Header) - Md5Sigature = md5.new(__FileHookOpen__(str(FilePath), 'rb').read()) - Md5Sum = Md5Sigature.hexdigest() - if Package: - if (FilePath, Md5Sum) not in Package.FileList: - Package.FileList.append((FilePath, Md5Sum)) - else: - if (FilePath, Md5Sum) not in Module.FileList: - Module.FileList.append((FilePath, Md5Sum)) - # - # append the module unicode files to Package FileList - # - for (FilePath, Md5Sum) in Module.FileList: - if str(FilePath).endswith('.uni') and Package and (FilePath, Md5Sum) not in Package.FileList: - Package.FileList.append((FilePath, Md5Sum)) - - return NewDict - -## -# Get all protocol/ppi/guid CNames and pcd name from all dependent DEC file -# -def GetDepProtocolPpiGuidPcdNames(DePackageObjList): - # - # [[Dec1Protocol1, Dec1Protocol2...], [Dec2Protocols...],...] - # - DependentProtocolCNames = [] - DependentPpiCNames = [] - DependentGuidCNames = [] - DependentPcdNames = [] - - for PackageObj in DePackageObjList: - # - # Get protocol CName list from all dependent DEC file - # - ProtocolCNames = [] - for Protocol in PackageObj.GetProtocolList(): - if Protocol.GetCName() not in ProtocolCNames: - ProtocolCNames.append(Protocol.GetCName()) - - DependentProtocolCNames.append(ProtocolCNames) - - # - # Get Ppi CName list from all dependent DEC file - # - PpiCNames = [] - for Ppi in PackageObj.GetPpiList(): - if Ppi.GetCName() not in PpiCNames: - PpiCNames.append(Ppi.GetCName()) - - DependentPpiCNames.append(PpiCNames) - - # - # Get Guid CName list from all dependent DEC file - # - GuidCNames = [] - for Guid in PackageObj.GetGuidList(): - if Guid.GetCName() not in GuidCNames: - GuidCNames.append(Guid.GetCName()) - - DependentGuidCNames.append(GuidCNames) - - # - # Get PcdName list from all dependent DEC file - # - PcdNames = [] - for Pcd in PackageObj.GetPcdList(): - PcdName = '.'.join([Pcd.GetTokenSpaceGuidCName(), Pcd.GetCName()]) - if PcdName not in PcdNames: - PcdNames.append(PcdName) - - DependentPcdNames.append(PcdNames) - - - return DependentProtocolCNames, DependentPpiCNames, DependentGuidCNames, DependentPcdNames - -## -# Check if protocol CName is redefined -# -def CheckProtoclCNameRedefined(Module, DependentProtocolCNames): - for ProtocolInModule in Module.GetProtocolList(): - IsCNameDefined = False - for PackageProtocolCNames in DependentProtocolCNames: - if ProtocolInModule.GetCName() in PackageProtocolCNames: - if IsCNameDefined: - Logger.Error("\nUPT", FORMAT_INVALID, - File = Module.GetFullPath(), - ExtraData = \ - ST.ERR_INF_PARSER_ITEM_DUPLICATE_IN_DEC % ProtocolInModule.GetCName()) - else: - IsCNameDefined = True - -## -# Check if Ppi CName is redefined -# -def CheckPpiCNameRedefined(Module, DependentPpiCNames): - for PpiInModule in Module.GetPpiList(): - IsCNameDefined = False - for PackagePpiCNames in DependentPpiCNames: - if PpiInModule.GetCName() in PackagePpiCNames: - if IsCNameDefined: - Logger.Error("\nUPT", FORMAT_INVALID, - File = Module.GetFullPath(), - ExtraData = ST.ERR_INF_PARSER_ITEM_DUPLICATE_IN_DEC % PpiInModule.GetCName()) - else: - IsCNameDefined = True - -## -# Check if Guid CName is redefined -# -def CheckGuidCNameRedefined(Module, DependentGuidCNames): - for GuidInModule in Module.GetGuidList(): - IsCNameDefined = False - for PackageGuidCNames in DependentGuidCNames: - if GuidInModule.GetCName() in PackageGuidCNames: - if IsCNameDefined: - Logger.Error("\nUPT", FORMAT_INVALID, - File = Module.GetFullPath(), - ExtraData = \ - ST.ERR_INF_PARSER_ITEM_DUPLICATE_IN_DEC % GuidInModule.GetCName()) - else: - IsCNameDefined = True - -## -# Check if PcdName is redefined -# -def CheckPcdNameRedefined(Module, DependentPcdNames): - PcdObjs = [] - if not Module.GetBinaryFileList(): - PcdObjs += Module.GetPcdList() - else: - Binary = Module.GetBinaryFileList()[0] - for AsBuild in Binary.GetAsBuiltList(): - PcdObjs += AsBuild.GetPatchPcdList() + AsBuild.GetPcdExList() - - for PcdObj in PcdObjs: - PcdName = '.'.join([PcdObj.GetTokenSpaceGuidCName(), PcdObj.GetCName()]) - IsPcdNameDefined = False - for PcdNames in DependentPcdNames: - if PcdName in PcdNames: - if IsPcdNameDefined: - Logger.Error("\nUPT", FORMAT_INVALID, - File = Module.GetFullPath(), - ExtraData = ST.ERR_INF_PARSER_ITEM_DUPLICATE_IN_DEC % PcdName) - else: - IsPcdNameDefined = True - -## -# Check if any Protocol/Ppi/Guid and Pcd name is redefined in its dependent DEC files -# -def CheckCNameInModuleRedefined(Module, DistPkg): - DePackageObjList = [] - # - # Get all dependent package objects - # - for Obj in Module.GetPackageDependencyList(): - Guid = Obj.GetGuid() - Version = Obj.GetVersion() - for Key in DistPkg.PackageSurfaceArea: - if Key[0] == Guid and Key[1] == Version: - if DistPkg.PackageSurfaceArea[Key] not in DePackageObjList: - DePackageObjList.append(DistPkg.PackageSurfaceArea[Key]) - - DependentProtocolCNames, DependentPpiCNames, DependentGuidCNames, DependentPcdNames = \ - GetDepProtocolPpiGuidPcdNames(DePackageObjList) - - CheckProtoclCNameRedefined(Module, DependentProtocolCNames) - CheckPpiCNameRedefined(Module, DependentPpiCNames) - CheckGuidCNameRedefined(Module, DependentGuidCNames) - CheckPcdNameRedefined(Module, DependentPcdNames) - -## GenToolMisc -# -# GenToolMisc -# -# -def GenToolMisc(DistPkg, WorkspaceDir, ContentZipFile): - ToolObject = DistPkg.Tools - MiscObject = DistPkg.MiscellaneousFiles - DistPkg.FileList = [] - FileList = [] - ToolFileNum = 0 - FileNum = 0 - RootDir = WorkspaceDir - - # - # FileList stores both tools files and misc files - # Misc file list must be appended to FileList *AFTER* Tools file list - # - if ToolObject: - FileList += ToolObject.GetFileList() - ToolFileNum = len(ToolObject.GetFileList()) - if 'EDK_TOOLS_PATH' in os.environ: - RootDir = os.environ['EDK_TOOLS_PATH'] - if MiscObject: - FileList += MiscObject.GetFileList() - for FileObject in FileList: - FileNum += 1 - if FileNum > ToolFileNum: - # - # Misc files, root should be changed to WORKSPACE - # - RootDir = WorkspaceDir - File = ConvertPath(FileObject.GetURI()) - ToFile = os.path.normpath(os.path.join(RootDir, File)) - if os.path.exists(ToFile): - Logger.Info( ST.WRN_FILE_EXISTED % ToFile ) - # - # ask for user input the new file name - # - Logger.Info( ST.MSG_NEW_FILE_NAME) - Input = stdin.readline() - Input = Input.replace('\r', '').replace('\n', '') - OrigPath = os.path.split(ToFile)[0] - ToFile = os.path.normpath(os.path.join(OrigPath, Input)) - FromFile = os.path.join(FileObject.GetURI()) - Md5Sum = InstallFile(ContentZipFile, FromFile, ToFile, DistPkg.Header.ReadOnly, FileObject.GetExecutable()) - DistPkg.FileList.append((ToFile, Md5Sum)) - -## Tool entrance method -# -# This method mainly dispatch specific methods per the command line options. -# If no error found, return zero value so the caller of this tool can know -# if it's executed successfully or not. -# -# @param Options: command Options -# -def Main(Options = None): - ContentZipFile, DistFile = None, None - - try: - DataBase = GlobalData.gDB - WorkspaceDir = GlobalData.gWORKSPACE - if not Options.PackageFile: - Logger.Error("InstallPkg", OPTION_MISSING, ExtraData=ST.ERR_SPECIFY_PACKAGE) - - # - # unzip dist.pkg file - # - DistPkg, ContentZipFile, DpPkgFileName, DistFile = UnZipDp(WorkspaceDir, Options.PackageFile) - - # - # check dependency - # - Dep = DependencyRules(DataBase) - CheckInstallDpx(Dep, DistPkg) - - # - # Install distribution - # - InstallDp(DistPkg, DpPkgFileName, ContentZipFile, Options, Dep, WorkspaceDir, DataBase) - ReturnCode = 0 - - except FatalError, XExcept: - ReturnCode = XExcept.args[0] - if Logger.GetLevel() <= Logger.DEBUG_9: - Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + format_exc()) - - except KeyboardInterrupt: - ReturnCode = ABORT_ERROR - if Logger.GetLevel() <= Logger.DEBUG_9: - Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + format_exc()) - - except: - ReturnCode = CODE_ERROR - Logger.Error( - "\nInstallPkg", - CODE_ERROR, - ST.ERR_UNKNOWN_FATAL_INSTALL_ERR % Options.PackageFile, - ExtraData=ST.MSG_SEARCH_FOR_HELP, - RaiseError=False - ) - Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), - platform) + format_exc()) - finally: - if ReturnCode != UPT_ALREADY_INSTALLED_ERROR: - Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_STARTED) - if DistFile: - DistFile.Close() - if ContentZipFile: - ContentZipFile.Close() - if GlobalData.gUNPACK_DIR: - rmtree(GlobalData.gUNPACK_DIR) - GlobalData.gUNPACK_DIR = None - Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_DONE) - if ReturnCode == 0: - Logger.Quiet(ST.MSG_FINISH) - return ReturnCode - -# BackupDist method -# -# This method will backup the Distribution file into the $(WORKSPACE)/conf/upt, and rename it -# if there is already a same-named distribution existed. -# -# @param DpPkgFileName: The distribution path -# @param Guid: The distribution Guid -# @param Version: The distribution Version -# @param WorkspaceDir: The workspace directory -# @retval NewDpPkgFileName: The exact backup file name -# -def BackupDist(DpPkgFileName, Guid, Version, WorkspaceDir): - DistFileName = os.path.split(DpPkgFileName)[1] - DestDir = os.path.normpath(os.path.join(WorkspaceDir, GlobalData.gUPT_DIR)) - CreateDirectory(DestDir) - DestFile = os.path.normpath(os.path.join(DestDir, DistFileName)) - if os.path.exists(DestFile): - FileName, Ext = os.path.splitext(DistFileName) - NewFileName = FileName + '_' + Guid + '_' + Version + Ext - DestFile = os.path.normpath(os.path.join(DestDir, NewFileName)) - if os.path.exists(DestFile): - # - # ask for user input the new file name - # - Logger.Info( ST.MSG_NEW_FILE_NAME_FOR_DIST) - Input = stdin.readline() - Input = Input.replace('\r', '').replace('\n', '') - DestFile = os.path.normpath(os.path.join(DestDir, Input)) - copyfile(DpPkgFileName, DestFile) - NewDpPkgFileName = DestFile[DestFile.find(DestDir) + len(DestDir) + 1:] - return NewDpPkgFileName - -## CheckInstallDpx method -# -# check whether distribution could be installed -# -# @param Dep: the DependencyRules instance that used to check dependency -# @param DistPkg: the distribution object -# -def CheckInstallDpx(Dep, DistPkg): - # - # Check distribution package installed or not - # - if Dep.CheckDpExists(DistPkg.Header.GetGuid(), - DistPkg.Header.GetVersion()): - Logger.Error("InstallPkg", UPT_ALREADY_INSTALLED_ERROR, - ST.WRN_DIST_PKG_INSTALLED) - # - # Check distribution dependency (all module dependency should be - # satisfied) - # - if not Dep.CheckInstallDpDepexSatisfied(DistPkg): - Logger.Error("InstallPkg", UNKNOWN_ERROR, - ST.ERR_PACKAGE_NOT_MATCH_DEPENDENCY, - ExtraData=DistPkg.Header.Name) - -## InstallModuleContent method -# -# If this is standalone module, then Package should be none, -# ModulePath should be '' -# @param FromPath: FromPath -# @param NewPath: NewPath -# @param ModulePath: ModulePath -# @param Module: Module -# @param ContentZipFile: ContentZipFile -# @param WorkspaceDir: WorkspaceDir -# @param ModuleList: ModuleList -# @param Package: Package -# -def InstallModuleContent(FromPath, NewPath, ModulePath, Module, ContentZipFile, - WorkspaceDir, ModuleList, Package = None, ReadOnly = False): - - if NewPath.startswith("\\") or NewPath.startswith("/"): - NewPath = NewPath[1:] - - if not IsValidInstallPath(NewPath): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%NewPath) - - NewModuleFullPath = os.path.normpath(os.path.join(WorkspaceDir, NewPath, - ConvertPath(ModulePath))) - Module.SetFullPath(os.path.normpath(os.path.join(NewModuleFullPath, - ConvertPath(Module.GetName()) + '.inf'))) - Module.FileList = [] - - for MiscFile in Module.GetMiscFileList(): - if not MiscFile: - continue - for Item in MiscFile.GetFileList(): - File = Item.GetURI() - if File.startswith("\\") or File.startswith("/"): - File = File[1:] - - if not IsValidInstallPath(File): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%File) - - FromFile = os.path.join(FromPath, ModulePath, File) - Executable = Item.GetExecutable() - ToFile = os.path.normpath(os.path.join(NewModuleFullPath, ConvertPath(File))) - Md5Sum = InstallFile(ContentZipFile, FromFile, ToFile, ReadOnly, Executable) - if Package and ((ToFile, Md5Sum) not in Package.FileList): - Package.FileList.append((ToFile, Md5Sum)) - elif Package: - continue - elif (ToFile, Md5Sum) not in Module.FileList: - Module.FileList.append((ToFile, Md5Sum)) - for Item in Module.GetSourceFileList(): - File = Item.GetSourceFile() - if File.startswith("\\") or File.startswith("/"): - File = File[1:] - - if not IsValidInstallPath(File): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%File) - - FromFile = os.path.join(FromPath, ModulePath, File) - ToFile = os.path.normpath(os.path.join(NewModuleFullPath, ConvertPath(File))) - Md5Sum = InstallFile(ContentZipFile, FromFile, ToFile, ReadOnly) - if Package and ((ToFile, Md5Sum) not in Package.FileList): - Package.FileList.append((ToFile, Md5Sum)) - elif Package: - continue - elif (ToFile, Md5Sum) not in Module.FileList: - Module.FileList.append((ToFile, Md5Sum)) - for Item in Module.GetBinaryFileList(): - FileNameList = Item.GetFileNameList() - for FileName in FileNameList: - File = FileName.GetFilename() - if File.startswith("\\") or File.startswith("/"): - File = File[1:] - - if not IsValidInstallPath(File): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%File) - - FromFile = os.path.join(FromPath, ModulePath, File) - ToFile = os.path.normpath(os.path.join(NewModuleFullPath, ConvertPath(File))) - Md5Sum = InstallFile(ContentZipFile, FromFile, ToFile, ReadOnly) - if Package and ((ToFile, Md5Sum) not in Package.FileList): - Package.FileList.append((ToFile, Md5Sum)) - elif Package: - continue - elif (ToFile, Md5Sum) not in Module.FileList: - Module.FileList.append((ToFile, Md5Sum)) - - InstallModuleContentZipFile(ContentZipFile, FromPath, ModulePath, WorkspaceDir, NewPath, Module, Package, ReadOnly, - ModuleList) - -## InstallModuleContentZipFile -# -# InstallModuleContentZipFile -# -def InstallModuleContentZipFile(ContentZipFile, FromPath, ModulePath, WorkspaceDir, NewPath, Module, Package, ReadOnly, - ModuleList): - # - # Extract other files under current module path in content Zip file but not listed in the description - # - if ContentZipFile: - for FileName in ContentZipFile.GetZipFile().namelist(): - FileName = os.path.normpath(FileName) - CheckPath = os.path.normpath(os.path.join(FromPath, ModulePath)) - if FileUnderPath(FileName, CheckPath): - if FileName.startswith("\\") or FileName.startswith("/"): - FileName = FileName[1:] - - if not IsValidInstallPath(FileName): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%FileName) - - FromFile = FileName - ToFile = os.path.normpath(os.path.join(WorkspaceDir, - ConvertPath(FileName.replace(FromPath, NewPath, 1)))) - CheckList = copy.copy(Module.FileList) - if Package: - CheckList += Package.FileList - for Item in CheckList: - if Item[0] == ToFile: - break - else: - Md5Sum = InstallFile(ContentZipFile, FromFile, ToFile, ReadOnly) - if Package and ((ToFile, Md5Sum) not in Package.FileList): - Package.FileList.append((ToFile, Md5Sum)) - elif Package: - continue - elif (ToFile, Md5Sum) not in Module.FileList: - Module.FileList.append((ToFile, Md5Sum)) - - ModuleList.append((Module, Package)) - -## FileUnderPath -# Check whether FileName started with directory specified by CheckPath -# -# @param FileName: the FileName need to be checked -# @param CheckPath: the path need to be checked against -# @return: True or False -# -def FileUnderPath(FileName, CheckPath): - FileName = FileName.replace('\\', '/') - FileName = os.path.normpath(FileName) - CheckPath = CheckPath.replace('\\', '/') - CheckPath = os.path.normpath(CheckPath) - if FileName.startswith(CheckPath): - RemainingPath = os.path.normpath(FileName.replace(CheckPath, '', 1)) - while RemainingPath.startswith('\\') or RemainingPath.startswith('/'): - RemainingPath = RemainingPath[1:] - if FileName == os.path.normpath(os.path.join(CheckPath, RemainingPath)): - return True - - return False - -## InstallFile -# Extract File from Zipfile, set file attribute, and return the Md5Sum -# -# @return: True or False -# -def InstallFile(ContentZipFile, FromFile, ToFile, ReadOnly, Executable=False): - if os.path.exists(os.path.normpath(ToFile)): - pass - else: - if not ContentZipFile or not ContentZipFile.UnpackFile(FromFile, ToFile): - Logger.Error("UPT", FILE_NOT_FOUND, ST.ERR_INSTALL_FILE_FROM_EMPTY_CONTENT % FromFile) - - if ReadOnly: - if not Executable: - chmod(ToFile, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) - else: - chmod(ToFile, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH) - elif Executable: - chmod(ToFile, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | stat.S_IWUSR | stat.S_IWGRP | - stat.S_IWOTH | stat.S_IEXEC | stat.S_IXGRP | stat.S_IXOTH) - else: - chmod(ToFile, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH | stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH) - - Md5Sigature = md5.new(__FileHookOpen__(str(ToFile), 'rb').read()) - Md5Sum = Md5Sigature.hexdigest() - - return Md5Sum - -## InstallPackageContent method -# -# @param FromPath: FromPath -# @param ToPath: ToPath -# @param Package: Package -# @param ContentZipFile: ContentZipFile -# @param Dep: Dep -# @param WorkspaceDir: WorkspaceDir -# @param ModuleList: ModuleList -# -def InstallPackageContent(FromPath, ToPath, Package, ContentZipFile, Dep, - WorkspaceDir, ModuleList, ReadOnly = False): - if Dep: - pass - Package.FileList = [] - - if ToPath.startswith("\\") or ToPath.startswith("/"): - ToPath = ToPath[1:] - - if not IsValidInstallPath(ToPath): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%ToPath) - - if FromPath.startswith("\\") or FromPath.startswith("/"): - FromPath = FromPath[1:] - - if not IsValidInstallPath(FromPath): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%FromPath) - - PackageFullPath = os.path.normpath(os.path.join(WorkspaceDir, ToPath)) - for MiscFile in Package.GetMiscFileList(): - for Item in MiscFile.GetFileList(): - FileName = Item.GetURI() - if FileName.startswith("\\") or FileName.startswith("/"): - FileName = FileName[1:] - - if not IsValidInstallPath(FileName): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%FileName) - - FromFile = os.path.join(FromPath, FileName) - Executable = Item.GetExecutable() - ToFile = (os.path.join(PackageFullPath, ConvertPath(FileName))) - Md5Sum = InstallFile(ContentZipFile, FromFile, ToFile, ReadOnly, Executable) - if (ToFile, Md5Sum) not in Package.FileList: - Package.FileList.append((ToFile, Md5Sum)) - PackageIncludeArchList = [] - for Item in Package.GetPackageIncludeFileList(): - FileName = Item.GetFilePath() - if FileName.startswith("\\") or FileName.startswith("/"): - FileName = FileName[1:] - - if not IsValidInstallPath(FileName): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%FileName) - - FromFile = os.path.join(FromPath, FileName) - ToFile = os.path.normpath(os.path.join(PackageFullPath, ConvertPath(FileName))) - RetFile = ContentZipFile.UnpackFile(FromFile, ToFile) - if RetFile == '': - # - # a non-exist path in Zipfile will return '', which means an include directory in our case - # save the information for later DEC creation usage and also create the directory - # - PackageIncludeArchList.append([Item.GetFilePath(), Item.GetSupArchList()]) - CreateDirectory(ToFile) - continue - if ReadOnly: - chmod(ToFile, stat.S_IRUSR|stat.S_IRGRP|stat.S_IROTH) - else: - chmod(ToFile, stat.S_IRUSR|stat.S_IRGRP|stat.S_IROTH|stat.S_IWUSR|stat.S_IWGRP|stat.S_IWOTH) - Md5Sigature = md5.new(__FileHookOpen__(str(ToFile), 'rb').read()) - Md5Sum = Md5Sigature.hexdigest() - if (ToFile, Md5Sum) not in Package.FileList: - Package.FileList.append((ToFile, Md5Sum)) - Package.SetIncludeArchList(PackageIncludeArchList) - - for Item in Package.GetStandardIncludeFileList(): - FileName = Item.GetFilePath() - if FileName.startswith("\\") or FileName.startswith("/"): - FileName = FileName[1:] - - if not IsValidInstallPath(FileName): - Logger.Error("UPT", FORMAT_INVALID, ST.ERR_FILE_NAME_INVALIDE%FileName) - - FromFile = os.path.join(FromPath, FileName) - ToFile = os.path.normpath(os.path.join(PackageFullPath, ConvertPath(FileName))) - Md5Sum = InstallFile(ContentZipFile, FromFile, ToFile, ReadOnly) - if (ToFile, Md5Sum) not in Package.FileList: - Package.FileList.append((ToFile, Md5Sum)) - - # - # Update package - # - Package.SetPackagePath(Package.GetPackagePath().replace(FromPath, - ToPath, 1)) - Package.SetFullPath(os.path.normpath(os.path.join(PackageFullPath, - ConvertPath(Package.GetName()) + '.dec'))) - - # - # Install files in module - # - Module = None - ModuleDict = Package.GetModuleDict() - for ModuleGuid, ModuleVersion, ModuleName, ModulePath in ModuleDict: - Module = ModuleDict[ModuleGuid, ModuleVersion, ModuleName, ModulePath] - InstallModuleContent(FromPath, ToPath, ModulePath, Module, - ContentZipFile, WorkspaceDir, ModuleList, Package, ReadOnly) - -## GetDPFile method -# -# @param ZipFile: A ZipFile -# -def GetDPFile(ZipFile): - ContentFile = '' - DescFile = '' - for FileName in ZipFile.namelist(): - if FileName.endswith('.content'): - if not ContentFile: - ContentFile = FileName - continue - elif FileName.endswith('.pkg'): - if not DescFile: - DescFile = FileName - continue - else: - continue - - Logger.Error("PackagingTool", FILE_TYPE_MISMATCH, - ExtraData=ST.ERR_DIST_FILE_TOOMANY) - if not DescFile or not ContentFile: - Logger.Error("PackagingTool", FILE_UNKNOWN_ERROR, - ExtraData=ST.ERR_DIST_FILE_TOOFEW) - return DescFile, ContentFile - -## InstallDp method -# -# Install the distribution to current workspace -# -def InstallDp(DistPkg, DpPkgFileName, ContentZipFile, Options, Dep, WorkspaceDir, DataBase): - # - # PackageList, ModuleList record the information for the meta-data - # files that need to be generated later - # - PackageList = [] - ModuleList = [] - DistPkg.PackageSurfaceArea = GetPackageList(DistPkg, Dep, WorkspaceDir, Options, - ContentZipFile, ModuleList, PackageList) - - DistPkg.ModuleSurfaceArea = GetModuleList(DistPkg, Dep, WorkspaceDir, ContentZipFile, ModuleList) - - GenToolMisc(DistPkg, WorkspaceDir, ContentZipFile) - - # - # copy "Distribution File" to directory $(WORKSPACE)/conf/upt - # - DistFileName = os.path.split(DpPkgFileName)[1] - NewDpPkgFileName = BackupDist(DpPkgFileName, DistPkg.Header.GetGuid(), DistPkg.Header.GetVersion(), WorkspaceDir) - - # - # update database - # - Logger.Quiet(ST.MSG_UPDATE_PACKAGE_DATABASE) - DataBase.AddDPObject(DistPkg, NewDpPkgFileName, DistFileName, - DistPkg.Header.RePackage) - -- cgit v1.2.3