aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/tools/dev/bin/onos-build-selective
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/tools/dev/bin/onos-build-selective')
-rwxr-xr-xframework/src/onos/tools/dev/bin/onos-build-selective44
1 files changed, 44 insertions, 0 deletions
diff --git a/framework/src/onos/tools/dev/bin/onos-build-selective b/framework/src/onos/tools/dev/bin/onos-build-selective
new file mode 100755
index 00000000..ac2dec8e
--- /dev/null
+++ b/framework/src/onos/tools/dev/bin/onos-build-selective
@@ -0,0 +1,44 @@
+#!/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
+ artifactId=$(grep -E "^ <artifactId>.*</artifactId>$" ${pd}/pom.xml | \
+ sed 's/.[^>]*>//;s/<.*//')
+ modulesERE="$modulesERE|$artifactId"
+ 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