## @file\r
# Install distribution package.\r
#\r
-# Copyright (c) 2011 - 2015, 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
#\r
# UnZipDp\r
#\r
-def UnZipDp(WorkspaceDir, DpPkgFileName):\r
+def UnZipDp(WorkspaceDir, DpPkgFileName, Index=1):\r
ContentZipFile = None\r
Logger.Quiet(ST.MSG_UZIP_PARSE_XML)\r
DistFile = PackageFile(DpPkgFileName)\r
\r
DpDescFileName, ContentFileName = GetDPFile(DistFile.GetZipFile())\r
\r
- GlobalData.gUNPACK_DIR = os.path.normpath(os.path.join(WorkspaceDir, ".tmp"))\r
- DistPkgFile = DistFile.UnpackFile(DpDescFileName,\r
- os.path.normpath(os.path.join(GlobalData.gUNPACK_DIR, DpDescFileName)))\r
+ TempDir = os.path.normpath(os.path.join(WorkspaceDir, "Conf/.tmp%s" % str(Index)))\r
+ GlobalData.gUNPACK_DIR.append(TempDir)\r
+ DistPkgFile = DistFile.UnpackFile(DpDescFileName, os.path.normpath(os.path.join(TempDir, DpDescFileName)))\r
if not DistPkgFile:\r
Logger.Error("InstallPkg", FILE_NOT_FOUND, ST.ERR_FILE_BROKEN %DpDescFileName)\r
\r
#\r
# unzip contents.zip file\r
#\r
- ContentFile = DistFile.UnpackFile(ContentFileName,\r
- os.path.normpath(os.path.join(GlobalData.gUNPACK_DIR, ContentFileName)))\r
+ ContentFile = DistFile.UnpackFile(ContentFileName, os.path.normpath(os.path.join(TempDir, ContentFileName)))\r
if not ContentFile:\r
Logger.Error("InstallPkg", FILE_NOT_FOUND,\r
ST.ERR_FILE_BROKEN % ContentFileName)\r
\r
- FilePointer = __FileHookOpen__(ContentFile, "rb")\r
- #\r
- # Assume no archive comment.\r
- #\r
- FilePointer.seek(0, SEEK_SET)\r
- FilePointer.seek(0, SEEK_END)\r
#\r
# Get file size\r
# \r
- FileSize = FilePointer.tell()\r
- FilePointer.close()\r
+ FileSize = os.path.getsize(ContentFile)\r
\r
if FileSize != 0: \r
ContentZipFile = PackageFile(ContentFile)\r
PackagePath = Path\r
Package = DistPkg.PackageSurfaceArea[Guid, Version, Path]\r
Logger.Info(ST.MSG_INSTALL_PACKAGE % Package.GetName())\r
- if Dep.CheckPackageExists(Guid, Version):\r
- Logger.Info(ST.WRN_PACKAGE_EXISTED %(Guid, Version))\r
+# if Dep.CheckPackageExists(Guid, Version):\r
+# Logger.Info(ST.WRN_PACKAGE_EXISTED %(Guid, Version))\r
if Options.UseGuidedPkgPath:\r
GuidedPkgPath = "%s_%s_%s" % (Package.GetName(), Guid, Version)\r
NewPackagePath = InstallNewPackage(WorkspaceDir, GuidedPkgPath, Options.CustomPath)\r
# @param Options: command Options\r
#\r
def Main(Options = None):\r
- ContentZipFile, DistFile = None, None\r
-\r
try:\r
DataBase = GlobalData.gDB\r
WorkspaceDir = GlobalData.gWORKSPACE\r
if not Options.PackageFile:\r
Logger.Error("InstallPkg", OPTION_MISSING, ExtraData=ST.ERR_SPECIFY_PACKAGE)\r
\r
- #\r
- # unzip dist.pkg file\r
- #\r
- DistPkg, ContentZipFile, DpPkgFileName, DistFile = UnZipDp(WorkspaceDir, Options.PackageFile)\r
+ # Get all Dist Info\r
+ DistInfoList = []\r
+ DistPkgList = []\r
+ Index = 1\r
+ for ToBeInstalledDist in Options.PackageFile:\r
+ #\r
+ # unzip dist.pkg file\r
+ #\r
+ DistInfoList.append(UnZipDp(WorkspaceDir, ToBeInstalledDist, Index))\r
+ DistPkgList.append(DistInfoList[-1][0])\r
+ Index += 1\r
\r
- #\r
- # check dependency\r
- #\r
- Dep = DependencyRules(DataBase)\r
- CheckInstallDpx(Dep, DistPkg)\r
+ #\r
+ # Add dist\r
+ #\r
+ GlobalData.gTO_BE_INSTALLED_DIST_LIST.append(DistInfoList[-1][0])\r
\r
- #\r
- # Install distribution\r
- #\r
- InstallDp(DistPkg, DpPkgFileName, ContentZipFile, Options, Dep, WorkspaceDir, DataBase)\r
+ # Check for dependency\r
+ Dep = DependencyRules(DataBase, DistPkgList)\r
+\r
+ for ToBeInstalledDist in DistInfoList:\r
+ CheckInstallDpx(Dep, ToBeInstalledDist[0], ToBeInstalledDist[2])\r
+\r
+ #\r
+ # Install distribution\r
+ #\r
+ InstallDp(ToBeInstalledDist[0], ToBeInstalledDist[2], ToBeInstalledDist[1],\r
+ Options, Dep, WorkspaceDir, DataBase)\r
ReturnCode = 0\r
\r
except FatalError, XExcept:\r
Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(),\r
platform) + format_exc())\r
finally:\r
- if ReturnCode != UPT_ALREADY_INSTALLED_ERROR:\r
- Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_STARTED)\r
- if DistFile:\r
- DistFile.Close()\r
- if ContentZipFile:\r
- ContentZipFile.Close()\r
- if GlobalData.gUNPACK_DIR:\r
- rmtree(GlobalData.gUNPACK_DIR)\r
- GlobalData.gUNPACK_DIR = None\r
- Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_DONE)\r
+ Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_STARTED)\r
+ for ToBeInstalledDist in DistInfoList:\r
+ if ToBeInstalledDist[3]:\r
+ ToBeInstalledDist[3].Close()\r
+ if ToBeInstalledDist[1]:\r
+ ToBeInstalledDist[1].Close()\r
+ for TempDir in GlobalData.gUNPACK_DIR:\r
+ rmtree(TempDir)\r
+ GlobalData.gUNPACK_DIR = []\r
+ Logger.Quiet(ST.MSG_REMOVE_TEMP_FILE_DONE)\r
if ReturnCode == 0:\r
Logger.Quiet(ST.MSG_FINISH)\r
return ReturnCode\r
# @param Dep: the DependencyRules instance that used to check dependency\r
# @param DistPkg: the distribution object\r
#\r
-def CheckInstallDpx(Dep, DistPkg):\r
+def CheckInstallDpx(Dep, DistPkg, DistPkgFileName):\r
#\r
# Check distribution package installed or not\r
#\r
if Dep.CheckDpExists(DistPkg.Header.GetGuid(),\r
DistPkg.Header.GetVersion()):\r
- Logger.Error("InstallPkg", UPT_ALREADY_INSTALLED_ERROR,\r
- ST.WRN_DIST_PKG_INSTALLED)\r
+ Logger.Error("InstallPkg",\r
+ UPT_ALREADY_INSTALLED_ERROR,\r
+ ST.WRN_DIST_PKG_INSTALLED % os.path.basename(DistPkgFileName))\r
#\r
# Check distribution dependency (all module dependency should be\r
# satisfied)\r