#!/bin/bash

test "$1" = "--verbose" && { VERBOSE=true ; shift ; }
test "$1" = "--batchmode" && { BATCHMODE=true ; shift ; }
DIR_TO_CHECK="$1"
DESTINATIONDIR="$2"
test -n "$DIR_TO_CHECK" || DIR_TO_CHECK=`pwd`
HELPERS_DIR="/usr/lib/obs/service/source_validators/helpers"
$HELPERS_DIR/check_input_filename "$DIR_TO_CHECK" || exit 1
. $HELPERS_DIR/functions
test -z "$DESTINATIONDIR" -a -d "$DIR_TO_CHECK/.osc" && DESTINATIONDIR="$DIR_TO_CHECK/.osc"

RETURN=0
test "$VERBOSE" = true && echo -n "- checking for stale or missing changes "

test -f "$DIR_TO_CHECK/_service" && grep -E -q 'name=.product_converter' "$DIR_TO_CHECK/_service" && {
    test "$VERBOSE" = true && echo skipped for product
    exit 0
}

print_specs () {
while read recipe flavor; do
  $HELPERS_DIR/spec_query --specfile "${DIR_TO_CHECK}/${recipe}" --print-subpacks --buildflavor "$flavor" | sed -e "s@ .*@@"
done < <(spec_build_flavors "$DIR_TO_CHECK")
}

SPECLIST=`print_specs | sort -u`
DO_PASS=""

test -n "$SPECLIST" && {
for i in $SPECLIST ; do
    case $i in
        *-) i=${i}MACRO ; DO_PASS="1" ;;
        -*) i=${i#-} ;; # multi-flavour with empty default
    esac
    test -f "$DIR_TO_CHECK/$i.changes" && DO_PASS=1
done
test "$DO_PASS" = "1" || {
    echo "WARNING: No .changes file found. This package can not be submitted to openSUSE product projects."
    exit 0
}
# check for stale .changes files
for i in "$DIR_TO_CHECK"/*.changes ; do
    test -f "$i" || continue
    N=`basename "$i" .changes`
    OKAY=0
    for pack in $SPECLIST ; do
        test "$pack" = "$N" && OKAY=1
        case $pack in
            *-) test "${pack}MACRO" = "$N" && OKAY=1 ;;
            -*) test "${pack#-}" = "$N" && OKAY=1 ;;
        esac
    done
    if test $OKAY = 0 ; then
	if ! grep -q "^Source[0-9]*:.*$N.changes" "$DIR_TO_CHECK"/*.spec ; then
	    echo "ERROR: $(basename $i) not a subpackage, please remove"
	    RETURN=1
	fi
    fi
done
}
test "$VERBOSE" = true && echo done


exit $RETURN
