#!/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

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 && egrep -q 'name=.product_converter' $DIR_TO_CHECK/_service && {
    test "$VERBOSE" = true && echo skipped for product
    exit 0
}

print_specs () {
for i in "$DIR_TO_CHECK"/*.spec; do
  # PASS if we have trouble parsing the .spec file
  if [ -e "$DIR_TO_CHECK/_multibuild" ]; then
    sed -n -e 's,.*<\(flavor\|package\)>\([^<]*\)</\(flavor\|package\)>.*,\2,p' \
      "$DIR_TO_CHECK/_multibuild" | while read flavor; do
        $HELPERS_DIR/spec_query --specfile "$i" --print-subpacks --buildflavor $flavor | sed -e "s@ .*@@"
    done
  fi
  $HELPERS_DIR/spec_query --specfile "$i" --print-subpacks | sed -e "s@ .*@@"
done
}

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

test -n "$SPECLIST" && {
for i in $SPECLIST ; do
    case $i in
        *-) i=${i}MACRO ; DO_PASS="1"
        ;;
    esac
    test -f $DIR_TO_CHECK/$i.changes -o "$DO_PASS" = "1" || {
	echo "WARNING: $i.changes does not exist. This package can not be submitted to openSUSE product projects."
	exit 0
    }
done
# 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
            ;;
        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
