#!/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 {} \; | \
        egrep -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=$(egrep -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 egrep '<artifact>' | egrep -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
