Browse code

package builder: fix updated packages regression

There is a but in building updated packages.
Let's say we have updated spec files for docker and libgcrypt
All other RPMS are available and up to date.

docker -br-> systemd -r-> libgcrypt
where:
br - BuildRequires
r - Requires

Package builder will build both packages in parallel.
docker build will fail as libgcrypt RPM is not available.

I does not happen during full boot, because before docker it will
build systemd which requires libgcrypt to be built first.

Fixing it by looking on entire dependency tree as a requirement
in order to put current package in nextPackagesReadyToBuild list.

Change-Id: I3be167d1677c267b58835fb58159801137840bac
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/6802
Tested-by: michellew <michellew@vmware.com>
Reviewed-by: Bo Gan <ganb@vmware.com>

Alexey Makhalov authored on 2019/02/27 12:17:41
Showing 1 changed files
... ...
@@ -559,8 +559,20 @@ class Scheduler(object):
559 559
         for pkg in Scheduler.listOfPackagesToBuild:
560 560
             if pkg in Scheduler.listOfPackagesCurrentlyBuilding:
561 561
                 continue
562
-            listRequiredPackages = list(set(Scheduler._getBuildRequiredPackages(pkg) + \
563
-                                   Scheduler._getRequiredPackages(pkg)))
562
+            listRequiredSubPackages = list(set(SPECS.getData().getBuildRequiresForPkg(pkg) + \
563
+                                   SPECS.getData().getRequiresAllForPkg(pkg)))
564
+
565
+            # extend to full Requires tree
566
+            for p in listRequiredSubPackages:
567
+                reqs = SPECS.getData().getRequiresAllForPkg(p)
568
+                for r in reqs:
569
+                    if r not in listRequiredSubPackages:
570
+                        listRequiredSubPackages.append(r)
571
+
572
+            # convert subpackages to basepkg
573
+            listRequiredPackages = set()
574
+            for p in listRequiredSubPackages:
575
+                listRequiredPackages.add(SPECS.getData().getBasePkg(p))
564 576
 
565 577
             canBuild = True
566 578
             for reqPkg in listRequiredPackages: