On Fri, 2017-09-01 at 19:01 +0200, Igor Gnatenko wrote:
So I think F28/F29 would be best time for retiring YUM. Right now
DNF
should be already stable and provide same capabilities (or documented
that something will not be supported).
Hopefully infrastructure / rel-eng folks will finally add support for
rich dependencies[0] which would mean that yum will not work in Fedora
anyway, so..
Do you still have some critical missing functionality in DNF? And let
us know reasons why would you like to keep YUM available (hopefully
there are no)!
P.S. I didn't wrote any Change Proposal yet, want to get feedback first
Pungi still uses yum:
[adamw@adam pungi (master)]$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
[adamw@adam pungi (master)]$ grep -R yum pungi/
pungi/arch.py:def tree_arch_to_yum_arch(tree_arch):
pungi/arch.py: yum_arch = TREE_ARCH_YUM_ARCH_MAP.get(tree_arch, tree_arch)
pungi/arch.py: return yum_arch
pungi/arch.py:def get_multilib_arch(yum_arch):
pungi/arch.py: arch_info = rpmUtils.arch.getMultiArchInfo(yum_arch)
pungi/arch.py: yum_arch = tree_arch_to_yum_arch(tree_arch)
pungi/arch.py: multilib_arch = get_multilib_arch(yum_arch)
pungi/arch.py: yum_arch = tree_arch_to_yum_arch(tree_arch)
pungi/arch.py: for arch in rpmUtils.arch.getArchList(yum_arch):
pungi/multilib.py:def do_multilib(yum_arch, methods, repos, tmpdir, logfile):
pungi/multilib.py: import yum
pungi/multilib.py: archlist = yum.rpmUtils.arch.getArchList(yum_arch)
pungi/multilib.py: yumbase = yum.YumBase()
pungi/multilib.py: yumbase.preconf.init_plugins = False
pungi/multilib.py: yumbase.preconf.root = tmpdir
pungi/multilib.py: # must run doConfigSetup() before touching yumbase.conf
pungi/multilib.py: yumbase.doConfigSetup(fn="/dev/null")
pungi/multilib.py: yumbase.conf.cache = False
pungi/multilib.py: yumbase.conf.cachedir = tmpdir
pungi/multilib.py: yumbase.conf.exactarch = True
pungi/multilib.py: yumbase.conf.gpgcheck = False
pungi/multilib.py: yumbase.conf.logfile = logfile
pungi/multilib.py: yumbase.conf.plugins = False
pungi/multilib.py: yumbase.conf.reposdir = []
pungi/multilib.py: yumbase.verbose_logger.setLevel(logging.ERROR)
pungi/multilib.py: yumbase.doRepoSetup()
pungi/multilib.py: yumbase.doTsSetup()
pungi/multilib.py: yumbase.doRpmDBSetup()
pungi/multilib.py:
yumbase.ts.pushVSFlags((rpm._RPMVSF_NOSIGNATURES|rpm._RPMVSF_NODIGESTS))
pungi/multilib.py: for repo in yumbase.repos.findRepos("*"):
pungi/multilib.py: yumbase.add_enable_repo(repo_id, baseurls=[baseurl])
pungi/multilib.py: yumbase.doSackSetup(archlist=archlist)
pungi/multilib.py: yumbase.doSackFilelistPopulate()
pungi/multilib.py: for po in sorted(yumbase.pkgSack):
pungi/multilib.py: help="path or url to yum repo; can be specified multiple
times",
pungi/phases/pkgset/sources/source_repos.py: # populate pkgset from yum repos
pungi/phases/osbs.py: config['yum_repourls'] = [self._get_repo(compose,
variant)]
pungi/phases/gather/methods/method_deps.py:from pungi.arch import tree_arch_to_yum_arch
pungi/phases/gather/methods/method_deps.py: yum_arch = tree_arch_to_yum_arch(arch)
pungi/phases/gather/methods/method_deps.py: cmd =
pungi_wrapper.get_pungi_cmd(pungi_conf, destdir=tmp_dir, name=variant.uid,
selfhosting=selfhosting, fulltree=fulltree, arch=yum_arch, full_archlist=True,
greedy=greedy_method, cache_dir=cache_dir, lookaside_repos=lookaside_repos,
multilib_methods=multilib_methods)
pungi/wrappers/comps.py:import yum.comps
pungi/wrappers/comps.py: self.comps = yum.comps.Comps()
pungi/wrappers/kojiwrapper.py: # HACK: remove rpmdb and yum cache
pungi/wrappers/kojiwrapper.py: command = "rm -f /var/lib/rpm/__db*; rm -rf
/var/cache/yum/*; set -x; " + command
pungi/checks.py: ("yum-utils", "/usr/bin/createrepo", None),
pungi/checks.py: ("yum-utils", "/usr/bin/mergerepo", None),
pungi/checks.py: ("yum-utils", "/usr/bin/repoquery", None),
pungi/config.py:import yum
pungi/config.py: self.set('pungi', 'arch',
yum.rpmUtils.arch.getBaseArch())
pungi/gather.py:import yum
pungi/gather.py:def yumlocked(method):
pungi/gather.py: with self.yumlock:
pungi/gather.py: self.yum_arch = arch_module.tree_arch_to_yum_arch(self.tree_arch)
pungi/gather.py: """A call back function used with
yum."""
pungi/gather.py:class PungiYum(yum.YumBase):
pungi/gather.py: yum.YumBase.__init__(self)
pungi/gather.py: yum.logging.basicConfig(level=yum.logging.DEBUG,
filename=logfile)
pungi/gather.py: # This function overrides a yum function, allowing pungi to
control
pungi/gather.py: result = yum.YumBase._compare_providers(self, *args, **kwargs)
pungi/gather.py: filename = self.config.get('pungi', 'cachedir') +
"/yumlock"
pungi/gather.py: self.yumlock = ReentrantYumLock(lock, self.logger)
pungi/gather.py: def _add_yum_repo(self, name, url, mirrorlist=False, groups=True,
pungi/gather.py: """This function adds a repo to the yum object.
pungi/gather.py: thisrepo = yum.yumRepo.YumRepository(name)
pungi/gather.py: thisrepo.mirrorlist = yum.parser.varReplace(url,
pungi/gather.py:
self.ayum.conf.yumvar)
pungi/gather.py: thisrepo.baseurl = yum.parser.varReplace(url,
pungi/gather.py:
self.ayum.conf.yumvar)
pungi/gather.py: thisrepo.basecachedir = self.ayum.conf.cachedir
pungi/gather.py: # This is until yum uses this failover by default
pungi/gather.py: self.ayum.repos.add(thisrepo)
pungi/gather.py: self.ayum.repos.enableRepo(thisrepo.id)
pungi/gather.py: self.ayum._getRepos(thisrepo=thisrepo.id, doSetup=True)
pungi/gather.py: self.ayum.repos.setProgressBar(CallBack())
pungi/gather.py: self.ayum.repos.callback = CallBack()
pungi/gather.py: @yumlocked
pungi/gather.py: def _inityum(self):
pungi/gather.py: """Initialize the yum object. Only needed for
certain actions."""
pungi/gather.py: # Create a yum object to use
pungi/gather.py: self.ayum = PungiYum(self.config)
pungi/gather.py: self.ayum.doLoggingSetup(6, 6)
pungi/gather.py: yumconf = yum.config.YumConf()
pungi/gather.py: yumconf.debuglevel = 6
pungi/gather.py: yumconf.errorlevel = 6
pungi/gather.py: yumconf.cachedir = self.config.get('pungi',
'cachedir')
pungi/gather.py: yumconf.persistdir = "/var/lib/yum" # keep at default,
gets appended to installroot
pungi/gather.py: yumconf.installroot = os.path.join(self.workdir,
'yumroot')
pungi/gather.py: yumconf.uid = os.geteuid()
pungi/gather.py: yumconf.cache = 0
pungi/gather.py: yumconf.failovermethod = 'priority'
pungi/gather.py: yumconf.deltarpm = 0
pungi/gather.py: yumvars = yum.config._getEnvVar()
pungi/gather.py: yumvars['releasever'] = self.config.get('pungi',
'version')
pungi/gather.py: yumvars['basearch'] =
yum.rpmUtils.arch.getBaseArch(myarch=self.tree_arch)
pungi/gather.py: yumconf.yumvar = yumvars
pungi/gather.py: self.ayum._conf = yumconf
pungi/gather.py: del self.ayum.prerepoconf
pungi/gather.py: self.ayum.repos.setCacheDir(self.ayum.conf.cachedir)
pungi/gather.py: self.ayum.arch.setup_arch(self.yum_arch)
pungi/gather.py: # whether to ignore groups, but yum is a yes/no on whether
to
pungi/gather.py: self._add_yum_repo(repo.name, repo.mirrorlist,
pungi/gather.py: self._add_yum_repo(repo.name, repo.baseurl,
pungi/gather.py: self.ayum._getSacks(archlist=self.valid_arches)
pungi/gather.py: self.ayum.install(po)
pungi/gather.py: def verifyCachePkg(self, po, path): # Stolen from yum
pungi/gather.py: filesum = yum.misc.checksum(csum_type, path)
pungi/gather.py: except yum.Errors.MiscError:
pungi/gather.py: deps = self.ayum.whatProvides(r, f, v).returnPackages()
pungi/gather.py: deps =
yum.packageSack.ListPackageSack(deps).returnNewestByNameArch()
pungi/gather.py: deps = [self.ayum._bestPackageFromList(all_deps)]
pungi/gather.py: except (yum.Errors.InstallError, yum.Errors.YumBaseError),
ex:
pungi/gather.py: exactmatched, matched, unmatched =
yum.packages.parsePackages(self.all_pkgs, [pattern], casematch=1,
pkgdict=self.pkg_refs.copy())
pungi/gather.py: match = self.ayum._bestPackageFromList(pkg_sack)
pungi/gather.py: matches = self.ayum.pkgSack.searchNevra(name=po.name,
ver=po.version, rel=po.release)
pungi/gather.py: match = self.ayum._bestPackageFromList(matches)
pungi/gather.py: if not self.ayum.comps.has_group(group.name):
pungi/gather.py: groupobj = self.ayum.comps.return_group(group.name)
pungi/gather.py: matches = self.ayum.pkgSack.searchNevra(name=condreq)
pungi/gather.py: matches = [self.ayum._bestPackageFromList(matches)]
pungi/gather.py: self.ayum.tsInfo.conditionals.setdefault(cond,
[]).extend(matches)
pungi/gather.py: filter(lambda x: x.default, self.ayum.comps.groups))
pungi/gather.py: self.langpacks = list(self.ayum.comps.langpacks)
pungi/gather.py: # old yum
pungi/gather.py: self.logger.warning("Could not get langpacks via
yum.comps. You may need to update yum.")
pungi/gather.py: except yum.Errors.GroupsError:
pungi/gather.py: self.all_pkgs = list(set(self.ayum.pkgSack.returnPackages()))
pungi/gather.py: self.pkg_refs = yum.packages.buildPkgRefDict(self.all_pkgs,
casematch=True)
pungi/gather.py: self.ayum.excludePackages()
pungi/gather.py: if "core" in [ i.groupid for i in self.ayum.comps.groups
]:
pungi/gather.py: if "base" in [ i.groupid for i in self.ayum.comps.groups
]:
pungi/gather.py: searchlist = yum.misc.unique(searchlist)
pungi/gather.py: matches = self.ayum.whatProvides(name, None,
None).returnPackages()
pungi/gather.py: exactmatched, matched, unmatched =
yum.packages.parsePackages(self.all_pkgs, [name], casematch=1,
pkgdict=self.pkg_refs.copy())
pungi/gather.py: packages =
yum.packageSack.ListPackageSack(packages).returnNewestByNameArch()
pungi/gather.py: packages = [self.ayum._bestPackageFromList(packages)]
pungi/gather.py: for txmbr in self.ayum.tsInfo:
pungi/gather.py: srpm_po_list = self.ayum.pkgSack.searchNevra(name=name, ver=ver,
rel=rel, arch="src")
pungi/gather.py: Requires yum still configured."""
pungi/gather.py: #(dummy1, everything, dummy2) =
yum.packages.parsePackages(self.all_pkgs, ['*'], pkgdict=self.pkg_refs.copy())
pungi/gather.py: find the sourcerpm for them. Requires yum still
pungi/gather.py: Requires yum still configured and a list of package
pungi/gather.py: debuginfo rpms for them. Requires yum still
pungi/gather.py: probs = self.ayum.downloadPkgs(polist)
pungi/gather.py: errors = yum.misc.unique(probs[key])
pungi/gather.py: self.logger.error("Unable to link %s from the yum
cache." % po.name)
pungi/gather.py: @yumlocked
pungi/gather.py: g = self.ayum.comps.return_group(item.name)
pungi/gather.py: allgroups = [g.groupid for g in self.ayum.comps.get_groups()]
pungi/gather.py: if group not in ourgroups and not
self.ayum.comps.return_group(group).langonly:
pungi/gather.py: del self.ayum.comps._groups[group]
pungi/gather.py: groups = [g.groupid for g in self.ayum.comps.get_groups()]
pungi/gather.py: envs = self.ayum.comps.get_environments()
pungi/gather.py: del self.ayum.comps._environments[env.environmentid]
pungi/gather.py: ourcomps.write(self.ayum.comps.xml())
pungi/gather.py: @yumlocked
pungi/gather.py: @yumlocked
pungi/gather.py: # whether to ignore groups, but yum is a yes/no on whether
to
pungi/gather.py: # Add the repo in the destdir to our yum object
Some of those are false positives (just names for things that are
actually moved to dnf), but a lot of them are actual usage of the yum
module.
--
Adam Williamson
Fedora QA Community Monkey
IRC: adamw | Twitter: AdamW_Fedora | XMPP: adamw AT happyassassin . net
http://www.happyassassin.net