| #!/bin/bash |
| # ---------------------------------------------------------------------------- |
| # Selectively builds only those projects that contained modified Java files. |
| # ---------------------------------------------------------------------------- |
| |
| cd $ONOS_ROOT |
| |
| projects=$(find $ONOS_ROOT -type f -path '*/src/*' \ |
| -exec $ONOS_ROOT/tools/dev/bin/onos-build-selective-hook {} \; | \ |
| grep -v -f $ONOS_ROOT/tools/dev/bin/onos-build-selective.exclude | \ |
| sort -u | sed "s:$ONOS_ROOT::g" | tr '\n' ',' | \ |
| sed 's:/,:,:g;s:,/:,:g;s:^/::g;s:,$::g') |
| |
| if [ -n "$projects" ]; then |
| # Ascertain artifact IDs of the projects to be rebuilt |
| modulesERE="" |
| for pd in ${projects//,/ }; do |
| if [ -f ${pd}/pom.xml ]; then |
| artifactId=$(grep -E "^ <artifactId>.*</artifactId>$" ${pd}/pom.xml | \ |
| sed 's/.[^>]*>//;s/<.*//') |
| modulesERE="$modulesERE|$artifactId" |
| fi |
| done |
| modulesERE=${modulesERE#|*} |
| |
| # Search through staged app.xml files for any apps that require one or |
| # more of the modified artifacts. |
| appProjects=$(find $ONOS_ROOT -type f -path '*/target/oar/app.xml' | \ |
| xargs grep '<artifact>' | grep -E "/($modulesERE)/" | \ |
| cut -d: -f1 | sed 's:/target/oar/.*::g' | \ |
| sort -u | sed "s:$ONOS_ROOT::g" | tr '\n' ',' | \ |
| sed 's:/,:,:g;s:,/:,:g;s:^/::g;s:,$::g') |
| |
| # If we found any, append those app projects to the list of projects to |
| # be built. |
| [ -n "$appProjects" ] && projects=$projects,$appProjects |
| |
| echo Building projects $projects |
| cd $ONOS_ROOT && mvn --projects $projects ${@:-clean install} |
| status=$? |
| |
| [ -n "$appProjects" ] && echo "App staging required for projects $appProjects" |
| exit $status |
| else |
| exit 0 |
| fi |