示例#1
0
    def install(self, pkgs, param, command):
        streamer = RootInfoDbStreamer()
        rootInfo = streamer.load(self._ainstConf.rootinfo)
        if rootInfo is None:
            Log.cout(Log.ERROR, 'Load root info failed')
            return OperatorRet.OPERATE_FAILED
        context = self._contextBuilder.buildAinstContext(self._installRoot,
                                                         self._ainstConf,
                                                         True,
                                                         param.repos,
                                                         param.localRepos,
                                                         localRoots=rootInfo.installRootSet)
        if context is None:
            Log.cout(Log.ERROR, 'Build context failed')
            return OperatorRet.OPERATE_FAILED

        installPkgs = self._selectInstallPkgs(context, pkgs)
        if not installPkgs:
            Log.cout(Log.INFO, 'No package to install')
            return OperatorRet.OPERATE_FAILED

        resolverOption = self._getResolverOption(param)
        depResolver = RecursiveDepResolver(context, resolverOption)
        ret, operations, topOrder = depResolver.install(installPkgs)
        if ret != error.ERROR_NONE:
            Log.cout(Log.ERROR, 'Dependency resovle failed')
            return OperatorRet.OPERATE_FAILED
        if not operations:
            Log.cout(Log.INFO, 'No effective operations')
            return OperatorRet.OPERATE_SUCCESS
        
        self._displayOperations(operations)
        if param.dryRun:
            return OperatorRet.OPERATE_SUCCESS

        if not param.confirmYes and not Log.coutConfirm():
            return True
        if not self._doRpmTransaction(operations):
            Log.cout(Log.ERROR, 'Do rpm transaction failed')
            return OperatorRet.OPERATE_FAILED

        return OperatorRet.OPERATE_SUCCESS
示例#2
0
    def remove(self, pkgs, param, command):
        streamer = RootInfoDbStreamer()
        rootInfo = streamer.load(self._ainstConf.rootinfo)
        if rootInfo is None:
            Log.cout(Log.ERROR, 'Load root info failed')
            return OperatorRet.OPERATE_FAILED
        context = self._contextBuilder.buildAinstContext(self._installRoot,
                                                         self._ainstConf,
                                                         False,
                                                         localRoots=rootInfo.installRootSet)
        if context is None:
            Log.cout(Log.ERROR, 'Build context failed')
            return OperatorRet.OPERATE_FAILED

        removePkgs = self._selectInstalledPkgs(context, pkgs)
        if not removePkgs:
            Log.cout(Log.ERROR, 'No package to remove')
            return OperatorRet.OPERATE_FAILED
        
        operations = self._getRemoveOperations(param, context, removePkgs)
        if operations is None:
            return OperatorRet.OPERATE_FAILED

        if not operations:
            Log.cout(Log.INFO, 'No effective operations')
            return OperatorRet.OPERATE_SUCCESS
        
        self._displayOperations(operations)
        if param.dryRun:
            return OperatorRet.OPERATE_SUCCESS

        if not param.confirmYes and not Log.coutConfirm():
            return OperatorRet.OPERATE_SUCCESS

        if not self._doRpmTransaction(operations, param.noDependents):
            Log.cout(Log.ERROR, 'Do rpm transaction failed')
            return OperatorRet.OPERATE_FAILED

        return OperatorRet.OPERATE_SUCCESS