]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/UPT/Core/IpiDb.py
Sync BaseTool trunk (version r2460) into EDKII BaseTools. The change mainly includes:
[mirror_edk2.git] / BaseTools / Source / Python / UPT / Core / IpiDb.py
index 38f872c2addf46887030a3c845b89843eea381e4..e45acb7d48ab189001fc0db80189b5094e2d8c45 100644 (file)
@@ -26,6 +26,7 @@ import time
 import Logger.Log as Logger\r
 from Logger import StringTable as ST\r
 from Logger.ToolError import UPT_ALREADY_RUNNING_ERROR\r
+from Logger.ToolError import UPT_DB_UPDATE_ERROR\r
 \r
 ## IpiDb\r
 #\r
@@ -118,11 +119,12 @@ class IpiDatabase(object):
         create table IF NOT EXISTS %s (\r
         ModuleGuid TEXT NOT NULL,\r
         ModuleVersion TEXT NOT NULL,\r
+        ModuleName TEXT NOT NULL,\r
         InstallTime REAL NOT NULL,\r
         PackageGuid TEXT,\r
         PackageVersion TEXT,\r
         InstallPath TEXT NOT NULL,\r
-        PRIMARY KEY (ModuleGuid, ModuleVersion, InstallPath)\r
+        PRIMARY KEY (ModuleGuid, ModuleVersion, ModuleName, InstallPath)\r
         )""" % self.ModInPkgTable\r
         self.Cur.execute(SqlCommand)\r
         \r
@@ -130,11 +132,12 @@ class IpiDatabase(object):
         create table IF NOT EXISTS %s (\r
         ModuleGuid TEXT NOT NULL,\r
         ModuleVersion TEXT NOT NULL,\r
+        ModuleName TEXT NOT NULL,\r
         InstallTime REAL NOT NULL,\r
         DpGuid TEXT,\r
         DpVersion TEXT,\r
         InstallPath TEXT NOT NULL,\r
-        PRIMARY KEY (ModuleGuid, ModuleVersion, InstallPath)\r
+        PRIMARY KEY (ModuleGuid, ModuleVersion, ModuleName, InstallPath)\r
         )""" % self.StandaloneModTable\r
         self.Cur.execute(SqlCommand)\r
         \r
@@ -142,6 +145,7 @@ class IpiDatabase(object):
         create table IF NOT EXISTS %s (\r
         ModuleGuid TEXT NOT NULL,\r
         ModuleVersion TEXT NOT NULL,\r
+        ModuleName TEXT NOT NULL,\r
         InstallPath TEXT NOT NULL,\r
         DepexGuid TEXT,\r
         DepexVersion TEXT\r
@@ -160,64 +164,72 @@ class IpiDatabase(object):
     # @param RePackage: A RePackage\r
     #\r
     def AddDPObject(self, DpObj, NewDpPkgFileName, DpPkgFileName, RePackage):\r
-        \r
-        for PkgKey in DpObj.PackageSurfaceArea.keys():\r
-            PkgGuid = PkgKey[0]\r
-            PkgVersion = PkgKey[1]\r
-            PkgInstallPath = PkgKey[2]\r
-            self._AddPackage(PkgGuid, PkgVersion, DpObj.Header.GetGuid(), \\r
-                             DpObj.Header.GetVersion(), PkgInstallPath)\r
-            PkgObj = DpObj.PackageSurfaceArea[PkgKey]\r
-            for ModKey in PkgObj.GetModuleDict().keys():\r
+        try:\r
+            for PkgKey in DpObj.PackageSurfaceArea.keys():\r
+                PkgGuid = PkgKey[0]\r
+                PkgVersion = PkgKey[1]\r
+                PkgInstallPath = PkgKey[2]\r
+                self._AddPackage(PkgGuid, PkgVersion, DpObj.Header.GetGuid(), \\r
+                                 DpObj.Header.GetVersion(), PkgInstallPath)\r
+                PkgObj = DpObj.PackageSurfaceArea[PkgKey]\r
+                for ModKey in PkgObj.GetModuleDict().keys():\r
+                    ModGuid = ModKey[0]\r
+                    ModVersion = ModKey[1]\r
+                    ModName = ModKey[2]\r
+                    ModInstallPath = ModKey[3]\r
+                    ModInstallPath = \\r
+                    os.path.normpath(os.path.join(PkgInstallPath, ModInstallPath))\r
+                    self._AddModuleInPackage(ModGuid, ModVersion, ModName, PkgGuid, \\r
+                                             PkgVersion, ModInstallPath)\r
+                    ModObj = PkgObj.GetModuleDict()[ModKey]\r
+                    for Dep in ModObj.GetPackageDependencyList():\r
+                        DepexGuid = Dep.GetGuid()\r
+                        DepexVersion = Dep.GetVersion()\r
+                        self._AddModuleDepex(ModGuid, ModVersion, ModName, ModInstallPath, \\r
+                                             DepexGuid, DepexVersion)\r
+                for (FilePath, Md5Sum) in PkgObj.FileList:\r
+                    self._AddDpFilePathList(DpObj.Header.GetGuid(), \\r
+                                            DpObj.Header.GetVersion(), FilePath, \\r
+                                            Md5Sum)\r
+    \r
+            for ModKey in DpObj.ModuleSurfaceArea.keys():\r
                 ModGuid = ModKey[0]\r
                 ModVersion = ModKey[1]\r
-                ModInstallPath = ModKey[2]\r
-                ModInstallPath = \\r
-                os.path.normpath(os.path.join(PkgInstallPath, ModInstallPath))\r
-                self._AddModuleInPackage(ModGuid, ModVersion, PkgGuid, \\r
-                                         PkgVersion, ModInstallPath)\r
-                ModObj = PkgObj.GetModuleDict()[ModKey]\r
+                ModName = ModKey[2]\r
+                ModInstallPath = ModKey[3]\r
+                self._AddStandaloneModule(ModGuid, ModVersion, ModName, \\r
+                                          DpObj.Header.GetGuid(), \\r
+                                          DpObj.Header.GetVersion(), \\r
+                                          ModInstallPath)\r
+                ModObj = DpObj.ModuleSurfaceArea[ModKey]\r
                 for Dep in ModObj.GetPackageDependencyList():\r
                     DepexGuid = Dep.GetGuid()\r
                     DepexVersion = Dep.GetVersion()\r
-                    self._AddModuleDepex(ModGuid, ModVersion, ModInstallPath, \\r
+                    self._AddModuleDepex(ModGuid, ModVersion, ModName, ModInstallPath, \\r
                                          DepexGuid, DepexVersion)\r
-            for (FilePath, Md5Sum) in PkgObj.FileList:\r
-                self._AddDpFilePathList(DpObj.Header.GetGuid(), \\r
-                                        DpObj.Header.GetVersion(), FilePath, \\r
-                                        Md5Sum)\r
-\r
-        for ModKey in DpObj.ModuleSurfaceArea.keys():\r
-            ModGuid = ModKey[0]\r
-            ModVersion = ModKey[1]\r
-            ModInstallPath = ModKey[2]\r
-            self._AddStandaloneModule(ModGuid, ModVersion, \\r
-                                      DpObj.Header.GetGuid(), \\r
-                                      DpObj.Header.GetVersion(), \\r
-                                      ModInstallPath)\r
-            ModObj = DpObj.ModuleSurfaceArea[ModKey]\r
-            for Dep in ModObj.GetPackageDependencyList():\r
-                DepexGuid = Dep.GetGuid()\r
-                DepexVersion = Dep.GetVersion()\r
-                self._AddModuleDepex(ModGuid, ModVersion, ModInstallPath, \\r
-                                     DepexGuid, DepexVersion)\r
-            for (Path, Md5Sum) in ModObj.FileList:\r
+                for (Path, Md5Sum) in ModObj.FileList:\r
+                    self._AddDpFilePathList(DpObj.Header.GetGuid(), \\r
+                                            DpObj.Header.GetVersion(), \\r
+                                            Path, Md5Sum)\r
+    \r
+            #\r
+            # add tool/misc files\r
+            #\r
+            for (Path, Md5Sum) in DpObj.FileList:\r
                 self._AddDpFilePathList(DpObj.Header.GetGuid(), \\r
-                                        DpObj.Header.GetVersion(), \\r
-                                        Path, Md5Sum)\r
-\r
-        #\r
-        # add tool/misc files\r
-        #\r
-        for (Path, Md5Sum) in DpObj.FileList:\r
-            self._AddDpFilePathList(DpObj.Header.GetGuid(), \\r
-                                    DpObj.Header.GetVersion(), Path, Md5Sum)\r
-                                \r
-        self._AddDp(DpObj.Header.GetGuid(), DpObj.Header.GetVersion(), \\r
-                    NewDpPkgFileName, DpPkgFileName, RePackage)\r
+                                        DpObj.Header.GetVersion(), Path, Md5Sum)\r
+                                    \r
+            self._AddDp(DpObj.Header.GetGuid(), DpObj.Header.GetVersion(), \\r
+                        NewDpPkgFileName, DpPkgFileName, RePackage)\r
+    \r
+            self.Conn.commit()\r
+        except sqlite3.IntegrityError, DetailMsg:\r
+            Logger.Error("UPT",\r
+                         UPT_DB_UPDATE_ERROR,\r
+                         ST.ERR_UPT_DB_UPDATE_ERROR,\r
+                         ExtraData = DetailMsg\r
+                         )\r
 \r
-        self.Conn.commit()\r
-                    \r
     ## Add a distribution install information\r
     #\r
     # @param Guid         Guid of the distribution package  \r
@@ -290,12 +302,14 @@ class IpiDatabase(object):
         \r
     ## Add a module that from a package install information\r
     #\r
-    # @param Guid: A package guid \r
-    # @param Version: A package version\r
-    # @param PkgGuid: A package guid\r
-    # @param PkgFileName: A package File Name\r
+    # @param Guid:    Module Guid \r
+    # @param Version: Module version\r
+    # @param Name:    Module Name\r
+    # @param PkgGuid: Package Guid\r
+    # @param PkgVersion: Package version\r
+    # @param Path:    Package relative path that module installs\r
     #\r
-    def _AddModuleInPackage(self, Guid, Version, PkgGuid=None, \\r
+    def _AddModuleInPackage(self, Guid, Version, Name, PkgGuid=None, \\r
                             PkgVersion=None, Path=''):\r
         \r
         if Version == None or len(Version.strip()) == 0:\r
@@ -312,8 +326,8 @@ class IpiDatabase(object):
         #\r
         CurrentTime = time.time()\r
         SqlCommand = \\r
-        """insert into %s values('%s', '%s', %s, '%s', '%s', '%s')""" % \\r
-        (self.ModInPkgTable, Guid, Version, CurrentTime, PkgGuid, PkgVersion, \\r
+        """insert into %s values('%s', '%s', '%s', %s, '%s', '%s', '%s')""" % \\r
+        (self.ModInPkgTable, Guid, Version, Name, CurrentTime, PkgGuid, PkgVersion, \\r
          Path)\r
         self.Cur.execute(SqlCommand)\r
     \r
@@ -321,11 +335,12 @@ class IpiDatabase(object):
     #\r
     # @param Guid: a module Guid\r
     # @param Version: a module Version\r
+    # @param Name: a module name\r
     # @param DpGuid: a DpGuid\r
     # @param DpVersion: a DpVersion\r
     # @param Path: path\r
     #\r
-    def _AddStandaloneModule(self, Guid, Version, DpGuid=None, \\r
+    def _AddStandaloneModule(self, Guid, Version, Name, DpGuid=None, \\r
                              DpVersion=None, Path=''):\r
         \r
         if Version == None or len(Version.strip()) == 0:\r
@@ -342,8 +357,8 @@ class IpiDatabase(object):
         #\r
         CurrentTime = time.time()\r
         SqlCommand = \\r
-        """insert into %s values('%s', '%s', %s, '%s', '%s', '%s')""" % \\r
-        (self.StandaloneModTable, Guid, Version, CurrentTime, DpGuid, \\r
+        """insert into %s values('%s', '%s', '%s', %s, '%s', '%s', '%s')""" % \\r
+        (self.StandaloneModTable, Guid, Version, Name, CurrentTime, DpGuid, \\r
          DpVersion, Path)\r
         self.Cur.execute(SqlCommand)\r
     \r
@@ -351,10 +366,11 @@ class IpiDatabase(object):
     #\r
     # @param Guid: a module Guid\r
     # @param Version: a module Version\r
+    # @param Name: a module name\r
     # @param DepexGuid: a module DepexGuid\r
     # @param DepexVersion: a module DepexVersion\r
     #\r
-    def _AddModuleDepex(self, Guid, Version, Path, DepexGuid=None, \\r
+    def _AddModuleDepex(self, Guid, Version, Name, Path, DepexGuid=None, \\r
                         DepexVersion=None):\r
                 \r
         if DepexGuid == None or len(DepexGuid.strip()) == 0:\r
@@ -366,8 +382,8 @@ class IpiDatabase(object):
         #\r
         # Add module depex information to DB.\r
         #\r
-        SqlCommand = """insert into %s values('%s', '%s', '%s', '%s', '%s')"""\\r
-         % (self.ModDepexTable, Guid, Version, Path, DepexGuid, DepexVersion)\r
+        SqlCommand = """insert into %s values('%s', '%s', '%s', '%s', '%s', '%s')"""\\r
+         % (self.ModDepexTable, Guid, Version, Name, Path, DepexGuid, DepexVersion)\r
         self.Cur.execute(SqlCommand)\r
         \r
     ## Remove a distribution install information, if no version specified, \r
@@ -389,10 +405,13 @@ class IpiDatabase(object):
         and ModDepexInfo.ModuleVersion in\r
         (select ModuleVersion from StandaloneModInfo as B \r
         where B.DpGuid = '%s' and B.DpVersion = '%s')\r
+        and ModDepexInfo.ModuleName in\r
+        (select ModuleName from StandaloneModInfo as B \r
+        where B.DpGuid = '%s' and B.DpVersion = '%s')\r
         and ModDepexInfo.InstallPath in\r
         (select InstallPath from StandaloneModInfo as B \r
         where B.DpGuid = '%s' and B.DpVersion = '%s') """ % \\r
-        (DpGuid, DpVersion, DpGuid, DpVersion, DpGuid, DpVersion)\r
+        (DpGuid, DpVersion, DpGuid, DpVersion, DpGuid, DpVersion, DpGuid, DpVersion)\r
 \r
         self.Cur.execute(SqlCommand)\r
         #\r
@@ -409,11 +428,15 @@ class IpiDatabase(object):
             (select ModuleVersion from ModInPkgInfo \r
             where ModInPkgInfo.PackageGuid ='%s' and \r
             ModInPkgInfo.PackageVersion = '%s')\r
+            and ModDepexInfo.ModuleName in\r
+            (select ModuleName from ModInPkgInfo \r
+            where ModInPkgInfo.PackageGuid ='%s' and \r
+            ModInPkgInfo.PackageVersion = '%s')\r
             and ModDepexInfo.InstallPath in\r
             (select InstallPath from ModInPkgInfo where \r
             ModInPkgInfo.PackageGuid ='%s' \r
             and ModInPkgInfo.PackageVersion = '%s')""" \\r
-                            % (Pkg[0], Pkg[1],Pkg[0], Pkg[1],Pkg[0], Pkg[1])\r
+                            % (Pkg[0], Pkg[1], Pkg[0], Pkg[1], Pkg[0], Pkg[1],Pkg[0], Pkg[1])\r
             \r
             self.Cur.execute(SqlCommand)\r
         #\r
@@ -627,23 +650,21 @@ class IpiDatabase(object):
     # @param Guid: A module guid\r
     # @param Version: A module version\r
     #\r
-    def GetModInPackage(self, Guid, Version, PkgGuid='', PkgVersion=''):\r
-        \r
+    def GetModInPackage(self, Guid, Version, Name, Path, PkgGuid='', PkgVersion=''):\r
+        (ModuleGuid, ModuleVersion, ModuleName, InstallPath) = (Guid, Version, Name, Path)\r
         if PkgVersion == '' or PkgGuid == '':\r
-\r
-            (ModuleGuid, ModuleVersion) = (Guid, Version)\r
             SqlCommand = """select * from %s where ModuleGuid ='%s' and \r
-            ModuleVersion = '%s'""" % (self.ModInPkgTable, ModuleGuid, \\r
-                                       ModuleVersion)\r
+            ModuleVersion = '%s' and InstallPath = '%s' \r
+            and ModuleName = '%s'""" % (self.ModInPkgTable, ModuleGuid, \\r
+                                       ModuleVersion, InstallPath, ModuleName)\r
             self.Cur.execute(SqlCommand)\r
-        \r
         else:\r
-            (ModuleGuid, ModuleVersion) = (Guid, Version)\r
             SqlCommand = """select * from %s where ModuleGuid ='%s' and \r
-            ModuleVersion = '%s' and PackageGuid ='%s' \r
+            ModuleVersion = '%s' and InstallPath = '%s' \r
+            and ModuleName = '%s' and PackageGuid ='%s' \r
             and PackageVersion = '%s'\r
                             """ % (self.ModInPkgTable, ModuleGuid, \\r
-                                   ModuleVersion, PkgGuid, PkgVersion)\r
+                                   ModuleVersion, InstallPath, ModuleName, PkgGuid, PkgVersion)\r
             self.Cur.execute(SqlCommand)\r
 \r
         ModList = []\r
@@ -662,21 +683,20 @@ class IpiDatabase(object):
     # @param Guid: A module guid \r
     # @param Version: A module version \r
     #\r
-    def GetStandaloneModule(self, Guid, Version, DpGuid='', DpVersion=''):\r
-        \r
+    def GetStandaloneModule(self, Guid, Version, Name, Path, DpGuid='', DpVersion=''):\r
+        (ModuleGuid, ModuleVersion, ModuleName, InstallPath) = (Guid, Version, Name, Path)\r
         if DpGuid == '':\r
-            (ModuleGuid, ModuleVersion) = (Guid, Version)\r
             SqlCommand = """select * from %s where ModuleGuid ='%s' and \r
-            ModuleVersion = '%s'""" % (self.StandaloneModTable, ModuleGuid, \\r
-                                       ModuleVersion)\r
+            ModuleVersion = '%s' and InstallPath = '%s' \r
+            and ModuleName = '%s'""" % (self.StandaloneModTable, ModuleGuid, \\r
+                                       ModuleVersion, InstallPath, ModuleName)\r
             self.Cur.execute(SqlCommand)\r
         \r
         else:\r
-            (ModuleGuid, ModuleVersion) = (Guid, Version)\r
             SqlCommand = """select * from %s where ModuleGuid ='%s' and \r
-            ModuleVersion = '%s' and DpGuid ='%s' and DpVersion = '%s'\r
+            ModuleVersion = '%s' and InstallPath = '%s' and ModuleName = '%s' and DpGuid ='%s' and DpVersion = '%s' \r
                             """ % (self.StandaloneModTable, ModuleGuid, \\r
-                                   ModuleVersion, DpGuid, DpVersion)\r
+                                   ModuleVersion, ModuleName, InstallPath, DpGuid, DpVersion)\r
             self.Cur.execute(SqlCommand)\r
 \r
         ModList = []\r