diff options
Diffstat (limited to 'packaging/check-files')
-rwxr-xr-x | packaging/check-files | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/packaging/check-files b/packaging/check-files new file mode 100755 index 000000000..4827f5632 --- /dev/null +++ b/packaging/check-files @@ -0,0 +1,126 @@ +#!/bin/bash + +# +# check-files +# +scriptname=check-files +if ! MYTMP=$(mktemp -d -t $scriptname-XXXXXX) +then + echo >&2 + echo >&2 + echo >&2 "Cannot create temporary directory." + echo >&2 + exit 1 +fi + +cleanup() { + status=$? + rm -rf "${MYTMP}" + exit $status +} + +# clean up if we get stopped by Crtl-C or forced logout or normal exit +trap cleanup INT +trap cleanup HUP +trap cleanup 0 + +set -e +if [ "$1" = "--debug" ] +then + set -x + shift +fi + +if [ $# -lt 1 ] +then + echo "check-files [--debug] -|filenames" + echo "e.g." + echo " git diff | ./packaging/check-files -" + echo "or in .git/hooks/pre-commit:" + echo " exec git diff --cached | ./packaging/check-files -" + exit 1 +fi + +if [ ! -x packaging/check-files ] +then + echo "Must be run from base directory" + exit 1 +fi + +if [ "$1" = "-" ] +then + from_cache=Y + f="" +else + from_cache= + for f in "$@" + do + if [ ! -f "$f" ] + then + echo "$f: no such file" + exit 1 + fi + done + + git status --porcelain "$@" | grep "^?" | cut -c4- > $MYTMP/missing.lst + + while read missing + do + git update-index --add --cacheinfo \ + 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 $missing + done < $MYTMP/missing.lst + + empty_tree=4b825dc642cb6eb9a060e54bf8d69288fbee4904 + git diff $empty_tree -- "$@" > $MYTMP/diff.full + f=$MYTMP/diff.full + + while read missing + do + git update-index --force-remove $missing + done < $MYTMP/missing.lst +fi + +> $MYTMP/diff.lst sed -e "/^+++ b/{p;s:^+++ b/::;w $MYTMP/files.lst" -e "d;}" $f + +#cat $MYTMP/diff.lst +#cat $MYTMP/files.lst + +dirname="${0%/*}" +if [ "$dirname" = "$0" ]; then dirname="."; fi + +for i in $dirname/*.functions $dirname/*/*.functions +do + if [ -f "$i" ] + then + source $i + echo $i | sed -e 's:.*/::' -e 's/\.functions$//' -e 's/\./_/g' >> $MYTMP/fns + fi +done + +status=0 +while read fn +do + "${fn}_check_init" $filename || status=1 +done < $MYTMP/fns + +while read filename +do + #echo Checking $filename + while read fn + do + if [ $status -eq 0 ] + then + "${fn}_check_file" $filename || status=1 + fi + done < $MYTMP/fns +done < $MYTMP/files.lst + +if [ $status -eq 0 ] +then + while read fn + do + "${fn}_check_fin" $filename || status=1 + done < $MYTMP/fns +fi + +exit $status |