| 207 | |
| 208 | == Caveats |
| 209 | |
| 210 | Special attention needs to be put into cases where unrelated ports are being updated in the same commit. Here is an example for such a case, all the ports A B C D where updated in the same commit. One possible topological build order could be: `D A B C`. |
| 211 | |
| 212 | {{{ |
| 213 | A -> D |
| 214 | B ---´ |
| 215 | C |
| 216 | }}} |
| 217 | |
| 218 | |
| 219 | Imaging that the build for D failed, we would still want to attempt to build C. Only the builds for A and B may be cancelled/skipped. |
| 220 | |
| 221 | If using builds, A and B would try to run, but then fail as D is not available. If using dynamic steps, the build would fail on the first failing step (by default). |
| 222 | |
| 223 | === Possible solutions |
| 224 | |
| 225 | For this to work correctly with buildbot, this dependency hierarchy has to be available in Python data structures to be able to: |
| 226 | * cancel pending builds on build failure, or |
| 227 | * add dependencies to builds, or |
| 228 | * execute as steps with doStepIf (checking for execution status of dependencies) |