#!/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 "^ .*$" ${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 '' | 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