mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-05-09 18:51:29 -07:00
Merge pull request #3444 from skvidal/yumopt
- optimize for the extremely common case of people specifying pkg names ...
This commit is contained in:
commit
3d73fb9cd7
1 changed files with 17 additions and 4 deletions
|
@ -130,7 +130,7 @@ def po_to_nevra(po):
|
||||||
else:
|
else:
|
||||||
return '%s-%s-%s.%s' % (po.name, po.version, po.release, po.arch)
|
return '%s-%s-%s.%s' % (po.name, po.version, po.release, po.arch)
|
||||||
|
|
||||||
def is_installed(module, repoq, pkgspec, conf_file, qf=def_qf, en_repos=[], dis_repos=[]):
|
def is_installed(module, repoq, pkgspec, conf_file, qf=def_qf, en_repos=[], dis_repos=[], is_pkg=False):
|
||||||
|
|
||||||
if not repoq:
|
if not repoq:
|
||||||
|
|
||||||
|
@ -155,8 +155,12 @@ def is_installed(module, repoq, pkgspec, conf_file, qf=def_qf, en_repos=[], dis_
|
||||||
|
|
||||||
cmd = repoq + ["--disablerepo=*", "--pkgnarrow=installed", "--qf", qf, pkgspec]
|
cmd = repoq + ["--disablerepo=*", "--pkgnarrow=installed", "--qf", qf, pkgspec]
|
||||||
rc,out,err = module.run_command(cmd)
|
rc,out,err = module.run_command(cmd)
|
||||||
|
if not is_pkg:
|
||||||
cmd = repoq + ["--disablerepo=*", "--pkgnarrow=installed", "--qf", qf, "--whatprovides", pkgspec]
|
cmd = repoq + ["--disablerepo=*", "--pkgnarrow=installed", "--qf", qf, "--whatprovides", pkgspec]
|
||||||
rc2,out2,err2 = module.run_command(cmd)
|
rc2,out2,err2 = module.run_command(cmd)
|
||||||
|
else:
|
||||||
|
rc2,out2,err2 = (0, '', '')
|
||||||
|
|
||||||
if rc == 0 and rc2 == 0:
|
if rc == 0 and rc2 == 0:
|
||||||
out += out2
|
out += out2
|
||||||
return [ p for p in out.split('\n') if p.strip() ]
|
return [ p for p in out.split('\n') if p.strip() ]
|
||||||
|
@ -406,6 +410,15 @@ def install(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos):
|
||||||
|
|
||||||
# range requires or file-requires or pkgname :(
|
# range requires or file-requires or pkgname :(
|
||||||
else:
|
else:
|
||||||
|
# most common case is the pkg is already installed and done
|
||||||
|
# short circuit all the bs - and search for it as a pkg in is_installed
|
||||||
|
# if you find it then we're done
|
||||||
|
if not set(['*','?']).intersection(set(spec)):
|
||||||
|
pkgs = is_installed(module, repoq, spec, conf_file, en_repos=en_repos, dis_repos=dis_repos, is_pkg=True)
|
||||||
|
if pkgs:
|
||||||
|
res['results'].append('%s providing %s is already installed' % (pkgs[0], spec))
|
||||||
|
continue
|
||||||
|
|
||||||
# look up what pkgs provide this
|
# look up what pkgs provide this
|
||||||
pkglist = what_provides(module, repoq, spec, conf_file, en_repos=en_repos, dis_repos=dis_repos)
|
pkglist = what_provides(module, repoq, spec, conf_file, en_repos=en_repos, dis_repos=dis_repos)
|
||||||
if not pkglist:
|
if not pkglist:
|
||||||
|
@ -417,7 +430,7 @@ def install(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos):
|
||||||
|
|
||||||
found = False
|
found = False
|
||||||
for this in pkglist:
|
for this in pkglist:
|
||||||
if is_installed(module, repoq, this, conf_file, en_repos=en_repos, dis_repos=dis_repos):
|
if is_installed(module, repoq, this, conf_file, en_repos=en_repos, dis_repos=dis_repos, is_pkg=True):
|
||||||
found = True
|
found = True
|
||||||
res['results'].append('%s providing %s is already installed' % (this, spec))
|
res['results'].append('%s providing %s is already installed' % (this, spec))
|
||||||
break
|
break
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue