| # CMD: Finds all modules whose input files cross package boundaries. |
| |
| include "library"; |
| |
| def getBlueprintDirPaths: |
| [.[] | .Blueprint | getDirPath] | sort_by(.) | unique | map({(.):""}) | add |
| ; |
| |
| def getNonNullActionModules: |
| [.[] | select(nonNullAction)] |
| ; |
| |
| def getOutputsOfModule: |
| [.Module.Actions | .[] | .Outputs | if . == null then [] else . end | .[]] |
| ; |
| |
| def getOutputsOfModules($nonNullActionModules): |
| $nonNullActionModules | map({(.Name):getOutputsOfModule}) | add |
| ; |
| |
| def getDepOutputs($outputsOfModules): |
| . as $depName | |
| if in($outputsOfModules) then ($outputsOfModules | ."\($depName)") |
| else [] end | .[] |
| ; |
| |
| def getDepOutputsOfModule($outputsOfModules): |
| [.Deps | .[] | .Name | getDepOutputs($outputsOfModules)] |
| | map({(.):""}) | add |
| ; |
| |
| def isDirPathMatch($blueprintDirPath; $allBlueprintDirPaths): |
| def _isDirPathMatch($blueprintDirPath; $allBlueprintDirPaths): |
| # True if there's a Blueprint file in the path and the path isn't |
| # equal to $blueprintDirPath of the module. |
| if in($allBlueprintDirPaths) and . != $blueprintDirPath then true |
| # Stops checking if the current path is already the $blueprintDirPath. |
| elif . == $blueprintDirPath then false |
| # Usually it should not hit this logic as it stops when the path is |
| # equal to $blueprintDirPath. |
| elif (contains("/") | not) then false |
| else (getDirPath | _isDirPathMatch($blueprintDirPath; $allBlueprintDirPaths)) |
| end |
| ; |
| _isDirPathMatch($blueprintDirPath; $allBlueprintDirPaths) |
| ; |
| |
| def isActionInputMatch($outputsOfModules; $allBlueprintDirPaths): |
| . as $moduleVariant | .Blueprint | getDirPath as $blueprintDirPath | |
| $moduleVariant | getDepOutputsOfModule($outputsOfModules) as $depOutputs | |
| $moduleVariant | getActionInputs | select(in($depOutputs) | not) | |
| select(startswith($blueprintDirPath)) | getDirPath | |
| isDirPathMatch($blueprintDirPath; $allBlueprintDirPaths) |
| ; |
| |
| getBlueprintDirPaths as $allBlueprintDirPaths | |
| getNonNullActionModules as $nonNullActionModules | |
| getOutputsOfModules($nonNullActionModules) as $outputsOfModules | |
| [$nonNullActionModules | .[] | |
| select(isActionInputMatch($outputsOfModules; $allBlueprintDirPaths)) | |
| .Name] | sort_by(.) | unique |