Skip to content

Commit

Permalink
mock: fix dynamic buildrequires unnecesarry loop
Browse files Browse the repository at this point in the history
per discussion here: rpm-software-management/rpm#963
Mock should accept return code 0 from rpm.

Relates: rpm-software-management#434
  • Loading branch information
hrnciar committed Mar 2, 2020
1 parent 6c9682c commit 13c095e
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions mock/py/mockbuild/backend.py
Expand Up @@ -180,24 +180,26 @@ def remove(self, *rpms):
self.buildroot.root_log.info(output)

@traceLog()
def installSrpmDeps(self, *srpms):
def installSrpmDeps(self, *srpms, ignored_deps = None):
"""Figure out deps from srpm. Call package manager to install them"""
try:
self.uid_manager.becomeUser(0, 0)

# first, install pre-existing deps and configured additional ones
deps = list(self.buildroot.preexisting_deps)
deps = set(self.buildroot.preexisting_deps)
for hdr in util.yieldSrpmHeaders(srpms, plainRpmOk=1):
# get text buildreqs
deps.extend(util.getAddtlReqs(hdr, self.more_buildreqs))
if deps:
deps.update(util.getAddtlReqs(hdr, self.more_buildreqs))
if deps > ignored_deps:
self.buildroot.pkg_manager.install(*deps, check=True)

# install actual build dependencies
self.buildroot.pkg_manager.builddep(*srpms, check=True)
finally:
self.uid_manager.restorePrivs()

return deps

@traceLog()
def installSpecDeps(self, spec_file):
try:
Expand Down Expand Up @@ -693,13 +695,13 @@ def get_command(mode):
bd_out = self.make_chroot_path(self.buildroot.builddir)
max_loops = int(self.config.get('dynamic_buildrequires_max_loops'))
success = False
deps = set()
if dynamic_buildrequires and self.config.get('dynamic_buildrequires'):
while not success and max_loops > 0:
# run rpmbuild+installSrpmDeps until
# * it fails
# * installSrpmDeps does nothing
# * or we run out of dynamic_buildrequires_max_loops tries
packages_before = self.buildroot.all_chroot_packages()
try:
self.buildroot.doChroot(get_command(['-br']),
shell=False, logger=self.buildroot.build_log, timeout=timeout,
Expand All @@ -708,18 +710,19 @@ def get_command(mode):
nspawn_args=self._get_nspawn_args(),
unshare_net=self.private_network,
printOutput=self.config['print_main_output'])
success = True
except Error as e:
if e.resultcode != 11:
raise e
finally:
max_loops -= 1
self.buildroot.root_log.info("Dynamic buildrequires detected")
self.buildroot.root_log.info("Going to install missing buildrequires")
buildreqs = glob.glob(bd_out + '/SRPMS/*.buildreqs.nosrc.rpm')
self.installSrpmDeps(*buildreqs)
packages_after = self.buildroot.all_chroot_packages()
if packages_after == packages_before:
new_deps = self.installSrpmDeps(*buildreqs, deps)
if new_deps <= deps:
success = True
else:
deps = new_deps
for f_buildreqs in buildreqs:
os.remove(f_buildreqs)
if not sc:
Expand Down

0 comments on commit 13c095e

Please sign in to comment.