#!/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