Tryag File Manager
Home
-
Turbo Force
Current Path :
/
proc
/
self
/
root
/
usr
/
bin
/
Upload File :
New :
File
Dir
//proc/self/root/usr/bin/yum-builddep
#!/usr/bin/python -tt # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import sys sys.path.insert(0,'/usr/share/yum-cli') import yum from yum.misc import getCacheDir from cli import * from utils import YumUtilBase from urlparse import urljoin from urlgrabber.progress import TextMeter class YumBuildDep(YumUtilBase): NAME = 'yum-builddep' VERSION = '1.0' USAGE = '"usage: yum-builddep [options] package1 [package2] [package..]' def __init__(self): YumUtilBase.__init__(self, YumBuildDep.NAME, YumBuildDep.VERSION, YumBuildDep.USAGE) self.logger = logging.getLogger("yum.verbose.cli.yumbuildep") self.main() def main(self): # Add util commandline options to the yum-cli ones self.optparser = self.getOptionParser() # Parse the commandline option and setup the basics. try: opts = self.doUtilConfigSetup() except yum.Errors.RepoError, e: self.logger.error("Cannot handle specific enablerepo/disablerepo options.") sys.exit(50) # Check if there is anything to do. if len(self.cmds) < 1: self.optparser.print_help() sys.exit(0) if self.conf.uid != 0: self.logger.error("Error: You must be root to install packages") sys.exit(1) # Setup yum (Ts, RPM db, Repo & Sack) self.doUtilYumSetup() # Do the real action # solve for each srpm and put the pkgs into a ts self.get_build_deps() self.buildTransaction() if len(self.tsInfo) < 1: print 'No uninstalled build requires' sys.exit() self.doTransaction() def setupSourceRepos(self): # enable the -source repos for enabled primary repos archlist = rpmUtils.arch.getArchList() + ['src'] for repo in self.repos.listEnabled(): if not repo.id.endswith('-source'): srcrepo = '%s-source' % repo.id else: repo.close() self.repos.disableRepo(repo.id) srcrepo = repo.id for r in self.repos.findRepos(srcrepo): if r in self.repos.listEnabled(): continue self.logger.info('Enabling %s repository' % r.id) r.enable() # Setup the repo, without a cache r.setup(0) # Setup pkgSack with 'src' in the archlist self._getSacks(archlist=archlist,thisrepo=r.id) # go through each of the pkgs, figure out what they are/where they are # if they are not a local package then run # Setup source repos #self.setupSourceRepos() # get all of their deps # throw them into a ts # run the ts def get_build_deps(self): srcnames = [] srpms = [] for arg in self.cmds: if arg.endswith('.src.rpm'): srpms.append(yum.packages.YumLocalPackage(self.ts, arg)) elif arg.endswith('.src'): srcnames.append(arg) else: srcnames.append('%s.src' % arg) if srcnames: self.setupSourceRepos() exact, match, unmatch = yum.packages.parsePackages(self.pkgSack.returnPackages(), srcnames, casematch=1) srpms += exact + match if len(unmatch): exact, match, unmatch = yum.packages.parsePackages(self.rpmdb.returnPackages(), unmatch, casematch=1) if len(unmatch): self.logger.error("No such package(s): %s" % ", ".join(unmatch)) sys.exit(1) for srpm in srpms: for dep in srpm.requiresList(): if dep.startswith("rpmlib("): continue try: pkg = self.returnPackageByDep(dep) print pkg if not self.rpmdb.installed(name=pkg.name): self.tsInfo.addInstall(pkg) except yum.Errors.YumBaseError, e: self.logger.error("Error: %s" % e) sys.exit(1) if __name__ == '__main__': util = YumBuildDep()