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