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>
| ... | ... |
@@ -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: |