예제 #1
0
    def buildMultiRootContext(self,
                              installRoots,
                              ainstConf,
                              useRepo=False,
                              repos=[]):
        repoSack = None
        if useRepo:
            repoSack = self._initRepos(ainstConf, repos)
            if repoSack is None:
                return None

        rootSack = None
        localSack = MultiPackageSack()
        for installRoot in installRoots:
            if installRoot == '/':
                rootSack = RPMDBPackageSack('/')
            else:
                sack = AinstPackageSackBuilder(
                    installRoot).buildActivePkgSack()
                if sack is None:
                    Log.cout(
                        Log.DEBUG,
                        'Build active pkg sack of %s failed' % installRoot)
                    continue
                localSack.addPackageSack(installRoot, sack)
        return AinstMultiRootContext(rootSack, localSack, repoSack)
예제 #2
0
 def _initPackageSack(self):
     repoList = self.getEnabledRepo()
     self.packageSack = MultiPackageSack()
     for repo in repoList:
         packageSack = repo.getPackageSack()
         if packageSack:
             self.packageSack.addPackageSack(repo.id, packageSack)
예제 #3
0
 def _initLocalRepos(self, repoSack, localRepos):
     if not localRepos:
         return True
     if not repoSack:
         repoSack = MultiPackageSack()
     for local in localRepos:
         fileNames = file_util.listDir(local)
         if not fileNames:
             continue
         pkgSack = PackageSack()
         for name in fileNames:
             path = local + '/' + name
             pkg = LocalRpmPackage(path)
             if pkg.init():
                 pkgSack.addPackageObject(pkg)
         repoSack.addPackageSack(local, pkgSack)
     return True
예제 #4
0
    def buildAinstContext(self,
                          installRoot,
                          ainstConf,
                          useRepo=True,
                          repos=[],
                          localRepos=[],
                          localRoots=None,
                          localActivePkgs=None,
                          localDeactivePkgs=None):
        repoSack = None
        if useRepo:
            repoSack = self._initRepos(ainstConf, repos)
            self._initLocalRepos(repoSack, localRepos)
            self._initInstallRootRepos(repoSack, installRoot)
            if repoSack is None:
                return None

        rootSack = RPMDBPackageSack('/')
        localSacks = MultiPackageSack()
        if installRoot == '/':
            if localRoots:
                for localRoot in localRoots:
                    builder = AinstPackageSackBuilder(localRoot)
                    sack = builder.buildActivePkgSack()
                    if sack is None:
                        Log.cout(
                            Log.DEBUG,
                            'Build active pkg sack of %s failed' % localRoot)
                        continue
                    localSacks.addPackageSack(localRoot, sack)
        else:
            builder = AinstPackageSackBuilder(installRoot)
            sack = builder.buildActivePkgSack()
            if sack is None:
                Log.cout(Log.DEBUG,
                         'Build active pkg sack of %s failed' % installRoot)
            else:
                localSacks.addPackageSack(installRoot, sack)
            self._addFakeLocalInstallPkgs(localActivePkgs, installRoot,
                                          localSacks)
            if not self._removeWillDeactivePkgs(localSacks, localDeactivePkgs):
                return None
        return AinstContextImpl(installRoot, repoSack, rootSack, localSacks)