#!/bin/sh
-try_if_new () {
- branch="$1"
- to_install="$2"
- commits=$(git-rev-list "ko-${branch}..${branch}")
+J='-l 2.5 -j'
- to_build=no
- case "$commits" in
- '')
- echo "* Up-to-date at ko-$branch"
- to_build=no
- ;;
- *)
- to_build=yes
- ;;
- esac
+test -z "$(git diff --cached --name-status)" || {
+ echo >&2 "Repository unclean."
+ exit 1
+}
+Meta/Make clean >/dev/null 2>&1
- case "$to_install" in
- ?*)
- to_build=yes
- ;;
- esac
+branches='naster master maint'
- case "$to_build" in
- yes)
- Meta/Make clean >/dev/null 2>&1 &&
- git checkout "$branch" &&
- echo "* Testing $branch" &&
- Meta/Make clean test >./":${branch}.log" 2>&1 &&
- case "$to_install" in
- ?*)
- Meta/Make install >>./":${branch}.log" 2>&1 ;;
- esac
+# Make sure naster is between master and pu if exists
+if naster=`git rev-parse --verify refs/heads/naster 2>/dev/null`
+then
+ master=`git rev-parse --verify refs/heads/master` &&
+ pu=`git rev-parse --verify refs/heads/pu` &&
+ MBM=`git merge-base --all $naster $master` &&
+ MBN=`git merge-base --all $naster $pu` &&
+ case ",$MBM,$MBN," in
+ ",$master,$naster,") ;;
+ *) echo >&2 "naster is not between master and pu"
+ exit 1 ;;
esac
-}
+ # If naster is the same as pu, no point rebuilding pu.
+ case ",$naster,$pu," in
+ ",$pu,$naster,") ;;
+ *) branches="$branches pu" ;;
+ esac
+fi
-git fetch ko &&
+nstall=install
+for branch in $branches
+do
+ if git rev-parse --verify refs/heads/$branch 2>/dev/null
+ then
+ echo "* $branch" &&
+ git checkout $branch &&
+ Meta/Make $J all &&
+ Meta/Make $J $nstall &&
+ Meta/Make test &&
+ Meta/Make clean &&
+ nstall=all || exit $?
+ else
+ echo "* No $branch"
+ fi
+done >./:all.log 2>&1
-try_if_new maint &&
-try_if_new pu &&
-try_if_new master install &&
-Meta/Make clean >/dev/null 2>&1