Example #1
0
    def _handleDependencies(self, deplist):
        '''Handle any unresolved dependencies returned by the
        TransactionSet.check() method.
        '''
        stillUnresolved = []
        for (unsatisfiedPkg, reqNameVer, _needsFlag, suggestedPkg, _sense) \
                in deplist:
            if reqNameVer[1]:
                reqString = "%s-%s" % reqNameVer
            else:
                reqString = reqNameVer[0]
            msg = "Package %s-%s-%s requires %s" % \
                  (unsatisfiedPkg + (reqString,))
            log.info(msg)
            if userchoices.getResolveDeps() and suggestedPkg:
                package = suggestedPkg[0]
                log.info("  resolving dependency with %s" % package.fullSrcPath)
                self.ts.addInstall(package.header, (package,), 'u')
                self.totalSize += (package.header[rpm.RPMTAG_SIZE] / SIZE_MB)
            elif userchoices.getIgnoreDeps():
                log.info("  ignoring dependency")
            else:
                log.error("unable to resolve dependency -- %s" % msg)
                stillUnresolved.append(msg)

        return stillUnresolved
Example #2
0
    def _handleDependencies(self, deplist):
        '''Handle any unresolved dependencies returned by the
        TransactionSet.check() method.
        '''
        stillUnresolved = []
        for (unsatisfiedPkg, reqNameVer, _needsFlag, suggestedPkg, _sense) \
                in deplist:
            if reqNameVer[1]:
                reqString = "%s-%s" % reqNameVer
            else:
                reqString = reqNameVer[0]
            msg = "Package %s-%s-%s requires %s" % \
                  (unsatisfiedPkg + (reqString,))
            log.info(msg)
            if userchoices.getResolveDeps() and suggestedPkg:
                package = suggestedPkg[0]
                log.info("  resolving dependency with %s" %
                         package.fullSrcPath)
                self.ts.addInstall(package.header, (package, ), 'u')
                self.totalSize += (package.header[rpm.RPMTAG_SIZE] / SIZE_MB)
            elif userchoices.getIgnoreDeps():
                log.info("  ignoring dependency")
            else:
                log.error("unable to resolve dependency -- %s" % msg)
                stillUnresolved.append(msg)

        return stillUnresolved
Example #3
0
    def installPackages(self):
        #self.ts.setProbFilter(rpm.RPMPROB_FILTER_DISKSPACE)

        # CPD - magic setColor(3) method which fixes all of your RPM woes.
        #       this actually tells rpmlib to allow both i386 and x86_64
        #       rpms.
        self.ts.setColor(RPMCOLOR_32BIT | RPMCOLOR_64BIT)

        for package in self.packages:
            rpmHeader = package.header
            # callbackArgs find their way into InstallCallback.runCallback
            callbackArgs = (package, )
            if (package.requirement == "required" or
                (package.requirement == "recommended"
                 and package.name not in userchoices.getPackagesNotToInstall())
                    or
                (package.requirement == "optional"
                 and package.name in userchoices.getPackagesToInstall())):
                self.ts.addInstall(rpmHeader, callbackArgs, 'u')
                self.totalSize += (rpmHeader[rpm.RPMTAG_SIZE] / SIZE_MB)
            elif userchoices.getResolveDeps():
                # Make the packages 'available' for automatic dependency stuff.
                self.ts.addInstall(rpmHeader, callbackArgs, 'a')
            else:
                log.info("skipping optional package %s" % package.name)

        cb = InstallCallback(self.totalSize, len(self.packages), self.uiHook)

        while True:
            unsatisfiedDeps = self.ts.check(dependencyCheckCallback)
            if not unsatisfiedDeps:
                break

            stillUnresolved = self._handleDependencies(unsatisfiedDeps)
            if stillUnresolved:
                raise UnsatisfiedDependencyException(stillUnresolved)

        self.ts.order()
        self.checkForProblems()

        buf = "Packages to install (post-check):"

        # XXX - rpm.ts objects aren't completely wrapped.  normally you'd
        #       want to check to see if there are any entries in it but there
        #       is no way to call len()
        for rpmPkg in self.ts:
            buf += " %s-%s-%s-%s" % \
                (rpmPkg.N(), rpmPkg.V(), rpmPkg.R(), rpmPkg.A())

        log.info(buf)

        if self.uiHook:
            self.uiHook.pushStatusGroup(self.totalSize)
        self.ts.run(cb.runCallback, 0)
        self.checkForProblems()
        if self.uiHook:
            self.uiHook.popStatusGroup()
Example #4
0
    def installPackages(self):
        #self.ts.setProbFilter(rpm.RPMPROB_FILTER_DISKSPACE)

        # CPD - magic setColor(3) method which fixes all of your RPM woes.
        #       this actually tells rpmlib to allow both i386 and x86_64
        #       rpms.
        self.ts.setColor(RPMCOLOR_32BIT | RPMCOLOR_64BIT)

        for package in self.packages:
            rpmHeader = package.header
            # callbackArgs find their way into InstallCallback.runCallback
            callbackArgs = (package,)
            if (package.requirement == "required" or
                (package.requirement == "recommended" and
                 package.name not in userchoices.getPackagesNotToInstall()) or
                (package.requirement == "optional" and
                 package.name in userchoices.getPackagesToInstall())):
                self.ts.addInstall(rpmHeader, callbackArgs, 'u')
                self.totalSize += (rpmHeader[rpm.RPMTAG_SIZE] / SIZE_MB)
            elif userchoices.getResolveDeps():
                # Make the packages 'available' for automatic dependency stuff.
                self.ts.addInstall(rpmHeader, callbackArgs, 'a')
            else:
                log.info("skipping optional package %s" % package.name)

        cb = InstallCallback(self.totalSize, len(self.packages), self.uiHook)

        while True:
            unsatisfiedDeps = self.ts.check(dependencyCheckCallback)
            if not unsatisfiedDeps:
                break
            
            stillUnresolved = self._handleDependencies(unsatisfiedDeps)
            if stillUnresolved:
                raise UnsatisfiedDependencyException(stillUnresolved)
        
        self.ts.order()
        self.checkForProblems()

        buf = "Packages to install (post-check):"

        # XXX - rpm.ts objects aren't completely wrapped.  normally you'd
        #       want to check to see if there are any entries in it but there
        #       is no way to call len()
        for rpmPkg in self.ts:
            buf += " %s-%s-%s-%s" % \
                (rpmPkg.N(), rpmPkg.V(), rpmPkg.R(), rpmPkg.A())

        log.info(buf)

        if self.uiHook:
            self.uiHook.pushStatusGroup(self.totalSize)
        self.ts.run(cb.runCallback, 0)
        self.checkForProblems()
        if self.uiHook:
            self.uiHook.popStatusGroup()
Example #5
0
def _genPackages():
    retval = ""
    flags = ""
    if userchoices.getResolveDeps():
        flags += " --resolvedeps"
    if userchoices.getIgnoreDeps():
        flags += " --ignoredeps"
    
    retval += "%%packages%s\n" % flags

    for pkg in userchoices.getPackagesToInstall():
        retval += "%s\n" % pkg
    for pkg in userchoices.getPackagesNotToInstall():
        retval += "-%s\n" % pkg

    return retval
Example #6
0
def _genPackages():
    retval = ""
    flags = ""
    if userchoices.getResolveDeps():
        flags += " --resolvedeps"
    if userchoices.getIgnoreDeps():
        flags += " --ignoredeps"

    retval += "%%packages%s\n" % flags

    for pkg in userchoices.getPackagesToInstall():
        retval += "%s\n" % pkg
    for pkg in userchoices.getPackagesNotToInstall():
        retval += "-%s\n" % pkg

    return retval