#!/bin/sh set -e top=$(pwd) jar=$1 bases=$2 dirs=$3 text=$4 bin=$5 shift 5; files="$@" stage="$top/${jar%.*}" mkdir -p $stage if hg root >/dev/null 2>&1 then root="$(hg root)" mf="$(hg --config ui.debug=false --config ui.verbose=false manifest)" find=$(which find) find() { $find "$@" -name '*.jar' echo "$mf" | sed -n "s!$(pwd | sed "s!$root/\?!!")/\?!!p" | grep "^$1" } fi getfiles() { filter="\.($(echo $1 | tr ' ' '|'))$"; shift find "$@" -not -path '*\.hg*' 2>/dev/null | grep -E "$filter" || true } copytext() { sed -e "s,@VERSION@,$VERSION,g" \ -e "s,@DATE@,$BUILD_DATE,g" \ <"$1" >"$2" cmp -s "$1" "$2" || ( echo "modified: $1"; diff -u "$1" "$2" | grep '^[-+][^-+]' ) } for base in $bases do ( set -e cd $base [ ${jar##*.} = jar ] && stage="$stage/${base##*/}" for dir in $dirs do for f in $(getfiles "$bin" "$dir") do mkdir -p "$stage/${f%/*}" cp $f "$stage/$f" done for f in $(getfiles "$text" "$dir") do mkdir -p "$stage/${f%/*}" copytext "$f" "$stage/$f" done done for f in $files do [ -f "$f" ] && copytext "$f" "$stage/$f" done true ) || exit 1 done [ -f "$top/$jar" ] && rm -f "$top/$jar" (set -e; cd $stage; zip -9r "$top/$jar" *) || exit 1 rm -rf "$stage" # vim:se ft=sh sts=4 sw=4 et: