#!/bin/bash
################################################################################
##
##  Licensed to the Apache Software Foundation (ASF) under one or more
##  contributor license agreements.  See the NOTICE file distributed with
##  this work for additional information regarding copyright ownership.
##  The ASF licenses this file to You under the Apache License, Version 2.0
##  (the "License"); you may not use this file except in compliance with
##  the License.  You may obtain a copy of the License at
##
##      http://www.apache.org/licenses/LICENSE-2.0
##
##  Unless required by applicable law or agreed to in writing, software
##  distributed under the License is distributed on an "AS IS" BASIS,
##  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
##  See the License for the specific language governing permissions and
##  limitations under the License.
##
################################################################################
##
## mini_run.sh - does an ant run on subdirectories.
##

if [ $# -lt 1 ]
    then
    echo "usage: mini_run.sh [FLAGS] <dir>|<file> ... "
    echo ""
    echo "   where <dir> represents a top-level test directory. For example: "
    echo "   components/Menu"
    echo ""
    echo "   or where <file> represents a specific test file. For example: "
    echo "   components/Menu/Properties/Menu_Properties.mxml"
    echo ""
    echo "   You can specify any number of directories or files. (Delimited by spaces)"
    echo "   if you designate -caseName, you should only indicate one file"
    echo ""
    echo "   where [FLAGS] represents optional flags (before other args). Currently supported: "
    echo ""
    echo "   -addAntArg=<-Darg=val> - pass this arg to the ant script. may be repeated."
    echo ""
    echo "   -addArg=<compilerArg> - pass this arg to the compile for this run. may be repeated."
    echo ""
    echo "   -all         - run ALL TESTCASES locally. Report only failures. "
    echo "                  No other args should be used. This takes a long while. "
    echo ""
    echo "   -apollo      - (AIR) compile and run for AIR"
    echo ""
    echo "   -bug=<bugID> - excludes normally, but include testcases associated with <bugID>"
    echo ""
    echo "   -branch=<branch> - fetch excludes for the given branch "
    echo ""
    echo "   -browser     - run in default browser"
    echo ""
    echo "   -caseName=<testcase> - runs <testcase>, if you have also designated a file. "
    echo ""
    echo "   -changes      - run the tests in changes.properties (generated by MustellaTestChooser)"
    echo ""
    echo "   -covtimeout  - add a 30 second additional timeout to run. separate from other timeouts"
    echo ""
    echo "   -createImages - mixin the CreateBitmapReferences, to create baselines image files"
    echo ""
    echo "   -doCheck     - insert tests to database, checking keywords & duplicate testIDs"
    echo ""
    echo "   -debug       - add \"-debug\" to swf compilation "
    echo ""
    echo "   -failures    - run tests that failed last run (mini_run run)"
    echo "                  'Timed out' type failures will not be rerun"
    echo ""
    echo "   -hurricane   - ZIP and SEND files to hurricane server to create baselines."
    echo "                  Use regular file/directory arguments."
    echo "                  Will not run the tests locally. "
    echo ""
    echo "   -imageDiff   - mixin the EnableRemoteImageDiff include, to debug image compares"
    echo ""

    echo "   -keep        - (AIR) keep generated xml files in apollo run"
    echo ""
    echo "   -kw=<keyword> - limit run to test cases with <keyword>"
    echo "                   You can optionally indicate directories or files with -kw flags."
    echo ""
    echo "   -mail=name@address  send mail, if any, to this address only"
    echo ""
    echo "   -mobile      - run mobile tests"
    echo ""
    echo "   -myExcludes  - do not fetch excludes from the database; use the ones already present in"
    echo "                  qa/sdk/testsuites/mustella/tests"
    echo ""
    echo "   -nofail      - ignore failures and continue processesing. "
    echo "                  REPORTS NO FAILURES. (useful for bitmap regeneration)"
    echo ""
    echo "   -norun       - don't run anything. If -doCheck, stop after that"
    echo ""
    echo "   -port=<runner port> - specify a port that the Runner will listen on. Ordinarily"
    echo "                         a user won't have to set this. "
    echo "                         because this is passed at compile time as a mixin, the"
    echo "                         only supported ports are 9999 and 10001"
    echo ""
    echo "   -quick       - Non-connectivity option: use existing excludes, skip cleanup"
    echo ""
    echo "   -results=log - get results via flashlog. (server style. Not always possible)"
    echo "   -results=wire- get results over the wire. (the default)"
    echo ""
    echo "   -retest=<bugID> - Run only the testcases associated with <bugID>. No file or dir args needed."
    echo "                  This is a rather narrow sense of retest. Cannot be used detached from db"
    echo ""
    echo "   -rerun       - run cases already compiled. Useful if re-configuring runtimes"
    echo "                  such as comparing standalone to browser, or browser to browser"
    echo ""
    echo "   -skipExclude - run testcases, ignoring any exclusions in the database"
    echo ""
    echo "   -smoke       - run the testcases designated in smoke.properties. must"
    echo "                  designate one or more directory arguments with this flag or use -all"
    echo "              also currently requires the presence of c:/tmp or /tmp  on your machine"
    echo "                  smoke.properties must be in the include text file format". 
    echo "                  designate directories or one or more smoke.properties files"
    echo "                  for example: "
    echo "                  ./mini_run.sh -smoke tests/components runs all of the smoke properties"
    echo "                  found in the subdirectories under components"
    echo "                  see: http://flexteam.macromedia.com/flexwiki/index.php/SDK:QA:mustella#Smoke_Tests"

    echo "   -sniffers    - mixin ALL sniffers (Event,Mouse,Pixel,Object) and playback control"
    echo ""

    echo "   -step_timeout=<seconds>   - ADD <seconds> to every test case step to avoid timeouts. "
    echo "                               useful in the context of running code coverage, etc. when "
    echo "                               things can get rather slow"
    echo ""
    echo "   -tier2       - run the testcases designated in tier2.properties files"
    echo "                  See -smoke for expected behavior" 
    echo " "
    
    echo ""
    echo "   -timeout=<seconds>  - set global test timeout to <seconds> (an int value). "
    echo ""
    echo "   -verbose     - Show more console output"
    echo ""
    echo ""
    echo ""

    exit
fi

if [ "$ANT_HOME" = "" ] 
    then
    echo "ANT_HOME is not set. Please set this variable"
    exit
fi

propfile=properties/mustella_tmp.properties
inherit_propfile=properties/mustella1.properties

changes=0
hurricane=0
use_wire=true
propfileName=mustella_tmp
newFile=""
cleanFile=""
testName=""
seenFile=""
run_one_file=""
skipcheck=1;
skipexclude=false
imageDiff=0
sniffers=0
createImages=0
timeout=12000
smoke=""
print_passes=true
run_all=0
ant_target=run
browser_run=""
apollo_run=""
exit_on_compile_error=true
extra_arg=""
port=9999
keep=false
find_our_own_files=false

failed_only=0
no_run=0

beliteral=0

# local.properties should be optional
if [ -f "local.properties" ]
    then
    check_air=`egrep "use_apollo" local.properties | egrep -v "^#" | awk -F"=" '{print $2}'`
    run_mobile_tests=`egrep "run_mobile_tests" local.properties | egrep -v "^#" | awk -F"=" '{print $2}'`
fi

os=`uname -s | tr '[A-Z]' '[a-z]'`
tmp=`echo $os | egrep "cygwin"`

if [ "$tmp" = "" ]
    then
    tmp=/tmp
else
    tmp=c:/tmp
fi

mkdir $tmp 2>/dev/null

# arg_list=`echo "$*" | awk -f cleanup.awk `

# echo "here is the arg list: $arg_list"

# exit

for i in "$@"
do
        if [ "$i" = "-docheck" ] || [ "$i" = "-doCheck" ]
            then
            skipcheck=0     
            continue
        fi

        if [ "$i" = "-skipexclude" ] || [ "$i" = "-skipExclude" ] || [ "$i" = "-skipexcludes" ] || [ "$i" = "-skipExcludes" ]
            then
            skipexclude=true
            continue
        fi

        if [ "$i" = "-myExcludes" ]
            then
            antArgs="$antArgs -Dexcludes_done=true"
            continue
        fi
            
        if [ "$i" = "-compileOnly" ]
            then
            compileOnly=1
            continue
        fi
            
        if [ "$i" = "-changes" ]
            then
            changes=1
            continue
        fi

        if [ "$i" = "-failures" ]
            then
            failed_only=1   

            tmp0=-includes=IncludeFileLocation

            if [ "$extra_arg" = "" ]
                then
                extra_arg="${tmp0}"
            else
                extra_arg="${extra_arg} $tmp0"
            fi
            continue
        fi
            

        if [ "$i" = "-verbose" ]
            then
            beVerbose=true
            antArgs="$antArgs -Ddebug=true"
            continue
        fi
            
        if [ "$i" = "-hurricane" ]
            then
            echo "HURRICANE noted, no local run"
            hurricane=1

        fi

        if [ "$i" = "-nofail" ]
            then
            extra_arg=" ${extra_arg} -includes=NoFail "

        fi

        if [ "$i" = "-imageDiff" ]
            then
            imageDiff=1
            extra_arg=" ${extra_arg} -includes=EnableRemoteImageDiff "
            timeout=1440000
            continue
        fi

        if [ "$i" = "-rerun" ]
            then
            ant_target=rerun
            continue
        fi

        if [ "$i" = "-results=log" ]
            then
            antArgs="$antArgs -Dresult_include=-includes=SendFormattedResultsToLog -Dget_results_from_log=true"
            use_wire=false
            continue
        fi

        if [ "$i" = "-results=wire" ]
            then
            ## with vetting runs, use the log
            if [ "$TEST_REVIEW" != "1" ]
                then
                antArgs="$antArgs -Dresult_include=-includes=SendResultsToRunner -Dget_results_from_log=false"
                use_wire=true
            fi
            continue
        fi

        if [ "$i" = "-keep" ]
            then
            keep=true
            continue
        fi

        if [ "$i" = "-apollo" ]
            then
            apollo_run=" -Duse_apollo=true"
            check_air=true
            continue
        fi

        if [ "$i" = "-mobile" ]
            then
            apollo_run=" -Duse_apollo=true -Drun_mobile_tests=true"
            run_mobile_tests=true
            continue
        fi

        if [ "$i" = "-browser" ]
            then
            browser_run=" -Duse_browser=true"
            continue
        fi

        if [ "$i" = "-norun" ]
            then
            no_run=1
            continue
        fi

        if [ "$i" = "-all" ]
            then
            run_all=1
            skipcheck=1     
            timeout=45
            propfileName=mustella1
            exit_on_compile_error=false
            break_early=1
            continue
        fi

        if [ "$i" = "-createImages" ]
            then
            createImages=1
            extra_arg=" ${extra_arg} -includes=CreateBitmapReferences "
            continue
        fi

        if [ "$i" = "-sniffers" ]
            then
            sniffers=1
            extra_arg=" ${extra_arg} -includes=SendResultsToSnifferClient,SendFormattedResultsToLog,PlaybackControl,VerboseMode,EventSnifferRemote,ObjectSnifferRemote,PixelSnifferRemote,MouseSnifferRemote "
            # antArgs="  ${antArgs} -Dexit_include=false"
            antArgs="  ${antArgs} -Dexit_include=-includes=UnitTester"
            timeout=1440000
            continue
        fi


        if [ "$i" = "-smoke" ]
            then
            target=smoke
            smoke=1
            extra_arg=" ${extra_arg} -includes=IncludeFileLocation"
            rm $tmp/IncludeList.txt
            continue
        fi

        if [ "$i" = "-tier2" ]
            then
            target=tier2
            smoke=1
            extra_arg=" ${extra_arg} -includes=IncludeFileLocation"
            rm $tmp/IncludeList.txt
            continue
        fi

        if [ "$i" = "-debug" ]
            then
            extra_arg=" ${extra_arg} -debug"
            
        fi


        if [ "$i" = "-covtimeout" ]
            then
            extra_arg=" ${extra_arg} -includes=CoverageTimeout"
            antArgs="$antArgs -Dcoverage_timeout=30000"
            
        fi

        if [ "$i" = "-quick" ]
            then
            antArgs="$antArgs -Dexcludes_done=true -Dnoclean.set=true"
        fi
            
        startsArgWith=`echo $i | awk '{printf ("%s", substr($1, 0, 4))}'`
        if [ "$startsArgWith" = "-kw=" ]
            then
            echo "we are here: $i"
            tmp0=`echo "$i"  |  sed -e 's/-kw=//' -e 's/ /@/g'`
            # tmp0=`echo "$i"  | awk '{printf ("%s", substr($1, 5))}'`
            echo "we are here: $tmp0"
        
            if [ "$keyword_list" != "" ]
                then
                keyword_list="$keyword_list,$tmp0"
            else
                keyword_list="$tmp0"
            fi
        
            echo $keyword_list

        fi

        startsArgWith=`echo $i | awk '{printf ("%s", substr($1, 0, 5))}'`

        if [ "$startsArgWith" = "-port" ]
            then
            port=`echo $i | awk '{printf ("%s", substr($1, 7))}'`

            ## we can only toggle port. the default is 9999; 
            ## if we want to change it, toggle
            if [ "$port" != "9999" ]
                then
                [ "$extra_arg" = "" ] && extra_arg=" -Duser_args=-includes=RunnerPortAlt" || extra_arg=" ${extra_arg} -includes=RunnerPortAlt" 

            fi

            continue
        fi

        if [ "$startsArgWith" = "-mail" ]
            then
            recip=`echo $i | awk '{printf ("%s", substr($1, 7))}'`

            mailto=" -Drecipients=$recip -Dqa_recipients=$recip -Dalways_recipients=$recip "
            echo "saw -mail, set to: $mailto"

            continue
        fi

        startsArgWith=`echo $i | awk '{printf ("%s", substr($1, 0, 8))}'`

        if [ "$startsArgWith" = "-branch=" ]
            then
            aBranch=`echo $i | awk '{ printf ("%s", substr($1, index($1, "=")+1))}'`

            useBranch=$aBranch
            antArgs="  ${antArgs} -Dbranch_name=${aBranch}"

        fi

        if [ "$startsArgWith" = "-retest=" ]
            then
            theBugID=`echo $i | awk '{ printf ("%s", substr($1, index($1, "=")+1))}'`
            antArgs="  ${antArgs} -Dbug_retry=${theBugID} "
            find_our_own_files=true

            tmp0=-includes=IncludeFileLocation

            if [ "$extra_arg" = "" ]
                then
                extra_arg="${tmp0}"
            else
                extra_arg="${extra_arg} $tmp0"
            fi
            
            # used to continue, but allow users to narrow the run
        fi

        startsArgWith=`echo $i | awk '{printf ("%s", substr($1, 0, 5))}'`
        if [ "$startsArgWith" = "-bug=" ]
            then
            theBugID=`echo $i | awk '{ printf ("%s", substr($1, index($1, "=")+1))}'`
            antArgs="  ${antArgs} -Dbug_retry=${theBugID} "
            continue
        fi

        startsArgWith=`echo $i | awk '{printf ("%s", substr($1, 0, 9))}'`

        if [ "$startsArgWith" = "-caseName" ]
            then
            testName=`echo $i | awk '{printf ("%s", substr($1, 11))}'`
            continue
        fi

        if [ "$startsArgWith" = "-timeout=" ]
            then
            timeout=`echo $i | awk '{printf ("%s", substr($1, 10))}'`
            continue
        fi

        if [ "$startsArgWith" = "-addAntAr" ]
            then
            tmp0=`echo $i | awk '{printf ("%s", substr($1, 12))}'`
            antArgs="$antArgs $tmp0"
            continue
        fi

        if [ "$startsArgWith" = "-step_tim" ]
            then
            tmp0=`echo $i | awk '{printf ("%s", substr($1, 15))}'`
            antArgs="$antArgs -Dstep_timeout=$tmp0"
            continue
        fi

        startsArgWith=`echo $i | awk '{printf ("%s", substr($1, 0, 7))}'`

        if [ "$startsArgWith" = "-addArg" ]
            then
            tmp0=`echo $i | awk '{printf ("%s", substr($1, 9))}'`
            if [ "$extra_arg" = "" ]
                then
                extra_arg="${tmp0}"
            else
                extra_arg="${extra_arg} $tmp0"
            fi
            continue
        fi

        startsWith=`echo $i | awk '{
            x=$1;
            y=substr($1, 0, index($1, "/"));
            if (index(y, "/") > 0)
                printf ( "%s", substr(y, 0, length(y)-1) )
            else
                printf ( "%s", y)}'`


        if [ "$startsWith" = "tests" ]
            then
            ## trim it for Ant. 
            newi=`echo $i | awk '{printf ("%s", substr($1, 7))}'`
            i=$newi
        fi



        ### okay, we dug this up, if it's a -f, we should 
        ### set a -D property for ant run_this_script. 
        ### otherwise, run a whole directory
        ### the other args are the same, however. :(
        mustellaTestDir=${MUSTELLA_TEST_DIR}

        if [ ! -d "$mustellaTestDir" ]
            then
            mustellaTestDir="tests";
        fi

        tmpx=$mustellaTestDir/${i}
        
        # echo "Looking for $tmpx"
        end=`echo $tmpx | awk -F"." '{print $NF}'`

        if [ ! -f "$tmpx" ] && [ ! -d "$tmpx" ]
            then
            continue
        fi


        ## The case when a baseline or other asset gets checked in makes it difficult to 
        ## know what test to run. Lacking such definition, we run 
        ## all tests in that area.
        if [ "$end" != "mxml" ] && [ ! -d "$tmpx" ]
            then



                        dir=$tmpx
                        while :
                        do

                                ## this fails if the name contains a SWF already.
                                ## we're headed for a directory
                                correctspot=`ls $dir 2>/dev/null | egrep -i "SWFs|swfs"` 

                                # echo "transform with correctspot: $correctspot"
                # 
                # don't get fooled by files with "swf" in them
                # move up until we find a swfs directory, or end up
                # with nowhere to go
                # 
                                if [ "$correctspot" = "" ]  || [ -f "$dir" ] && [ "$dir" != "." ]
                                        then
                    # echo "doing dirname on $dir"
                                        dir=`dirname $dir`
                elif [ "$correctspot" != "" ] || [ "$dir" = "." ]
                    then
                                        tmpx=$dir
                    # get rid of the leading /tests/
                                        i=`echo $dir | awk '{printf ("%s", substr($1, 7))}'`
                                        break
                                fi

                        done
            # echo "result: $i"


        fi


        ## if break_early, we probably don't want to descend into this stuff.
        ##
        

        if [ "$break_early" = "1" ]
            then
            break
        fi


        if [ -f "$tmpx" ] || [ "$smoke" = "1" ]
            then

            # echo "It's a file"

            ### new.
        
            # was:
            dir=`dirname $i`
            dir=`dirname $dir`

            is_mobile_test=`echo $dir | egrep "mobile"`
            has_air=`echo $dir | egrep "apollo"`
            
            if [ "$check_air" = "true" ] && [ "$has_air" = "" ] && [ "$TEST_REVIEW" = "1" ] && [ "$run_mobile_tests" != "true" ]
                then
                echo "AIR vetting run, but directory $dir is not an air test. Will not run it"
                continue
            fi

            if [ "${run_mobile_tests}" != "true" ] && [ "$is_mobile_test" != "" ]
                then
                echo "Not a mobile server, and $dir is a mobile directory.  Will not run it"
                continue
            fi

            if [ "${run_mobile_tests}" = "true" ] && [ "$is_mobile_test" = "" ]
                then
                echo "Mobile server, and $dir is not a mobile directory.  Will not run it."
                continue
            fi
    
            end=`echo $tmpx | awk -F"." '{print $NF}'`

            ## if it's not a .png file, just run the file. If it is a png file, we'll generalize the run
            ## to the directory (not knowing any better)
            if [ "$end" != "png" ]
                then
                        
                ## append to a semicolon delimted list of individual files
                if [ "$run_one_file" != "" ]
                    then
                    tmpz=`basename $i`
                    run_one_file="${run_one_file};${tmpz}"
                else
                    run_one_file=`basename $i`
                fi


            fi

            if [ "$smoke" = "1" ]
                then


                # constrain original directory

                . ./make_smoke.sh $i $target

                sdk_mustella_includes="${sdk_mustella_includes},${tmp_result}"
                sdk_mustella_swfs="${sdk_mustella_swfs},${tmp_dir}" 

            else

                sdk_mustella_includes="${sdk_mustella_includes},${i}"
                sdk_mustella_swfs="${sdk_mustella_swfs},${dir}/**/*.swf" 

            fi

        elif [ -d "$tmpx" ]
            then


            ### Figure out where we might be. 
            ### if this directory has .mxml or .png, we have to move up     
            ### to include the swfs directory. 
            ### anything else, we can assume they gave us the right thing
            
            val=`ls $tmpx/*.mxml 2>/dev/null`
            ret1=$?
            val=`ls $tmpx/*.png 2>/dev/null`
            ret2=$?


            if [ $ret1 != 0 ] && [ $ret2 != 0 ] 
                then
                beliteral=1
            fi


            dir=$tmpx
            adjusted=0
            lastdir=""
            while :
            do
                if [ $beliteral = 1 ]
                    then
                    break
                fi

                correctspot=`ls $dir | egrep -i "SWFs|swfs"`

                echo "at correctspot: $correctspot"
            
                
                if [ "$correctspot" = "" ]
                    then
                    adjusted=1
                    dir=`dirname $dir`
                    [ "$beVerbose" = "true" ] && echo "at adjust dir: $dir"

                    [ "$dir" = "$lastdir" ] && echo "no change, abort" : lastdir=$dir
                    [ "$beVerbose" = "true" ] && echo " last dir: $lastdir"
                    [ "$lastdir" = "" ] && lastdir=$dir && echo "lastdir empty!" 

                else
                    ## clean off the "tests" front
                    tmpx=$dir
                    dir=`echo $dir | awk '{printf ("%s", substr($1, 7))}'`
                    break
                fi

            done

            # local.properties should be optional
            if [ -f "local.properties" ] && [ "${run_mobile_tests}" != "true" ]
                then
                run_mobile_tests=`egrep "run_mobile_tests" local.properties | egrep -v "^#" | awk -F"=" '{print $2}'`
            fi
            is_mobile_test=`echo $dir | egrep "mobile"`
            
            if [ "$check_air" = "true" ] && [ "$has_air" = "" ] && [ "$TEST_REVIEW" = "1" ] && [ "$run_mobile_tests" != "true" ]
                then
                echo "AIR vetting run, but directory $dir is not an air test. Will not run it"
                continue
            fi

            if [ "${run_mobile_tests}" != "true" ] && [ "$is_mobile_test" != "" ]
                then
                echo "Not a mobile server, and $dir is a mobile directory.  Will not run it"
                continue
            fi

            if [ "${run_mobile_tests}" = "true" ] && [ "$is_mobile_test" = "" ]
                then
                echo "Mobile server, and $dir is not a mobile directory.  Will not run it."
                continue
            fi

            if [ $adjusted = 1 ]
                then
        
                ## we need to add a swf directory   
                ## 

                sdk_mustella_includes=${dir}/${correctspot}/**/*.mxml,${sdk_mustella_includes}
                sdk_mustella_swfs=${dir}/${correctspot}/**/*.swf,${sdk_mustella_swfs}
                    

            fi


            ### can we lighten up about the commas? just have a leading comma, big deal

            if [ "$sdk_mustella_includes" != "" ]
                then
                sdk_mustella_includes="${sdk_mustella_includes},${i}/**/*.mxml"
                sdk_mustella_swfs="${sdk_mustella_swfs},${i}/**/*.swf" 
            else
                sdk_mustella_includes="${i}/**/*.mxml"
                sdk_mustella_swfs="${i}/**/*.swf"
            fi

        else
        
            echo "Not found"

        fi



done



### special case: the -smoke and -all case is problematic
if [ "$smoke" = "1" ] && [ "$run_all" = "1" ] 
    then

    ## special case, all and smoke
    propfileName=mustella_tmp   
    print_passes=true

    # make smoke sets tmp_result and tmp_dir
    . ./make_smoke.sh tests $target


    sdk_mustella_includes="${tmp_result}"
    sdk_mustella_swfs="${tmp_dir}"


fi



rm  $propfile  2>/dev/null


if [ "$sdk_mustella_includes" = "" ] && [ "$changes" = "0" ] && [ "$run_all" = "0" ] && [ "$find_our_own_files" = "false" ] && [ "$failed_only" = "0" ] && [ "$keyword_list" = "" ]
    then
    echo "Nothing was found to include. Will exit"
    exit 1
fi


egrep "sdk.mustella.excludes" $inherit_propfile  | awk -f clobber.awk > $propfile
egrep "apollo_only_excludes" $inherit_propfile  | awk -f clobber.awk >> $propfile



if [ "$find_our_own_files" = "true" ]
    then

    echo "Querying for test files..."
    
    $ANT_HOME/bin/ant -Dbug_retry=$theBugID query_from_bug_id


    ### if there's nothing to run, figure out the includes automatically.
    ### Otherwise, use what we're given
    if [ "$sdk_mustella_includes" = "" ]
        then

        echo " " >> $propfile
        echo " " >> $propfile
        echo "sdk.mustella.swfs=**/*.swf" >> $propfile
        sort -u tmp_mustella_tmp | egrep -v "rows affected" | awk 'BEGIN { printf ("sdk.mustella.includes=")}{printf ("%s,", $NF)}' >> $propfile

        egrep -v "rows affected" ${tmp}/IncludeList.txt.tmp >  ${tmp}/IncludeList.txt
    else

        egrep -v "rows affected" ${tmp}/IncludeList.txt.tmp >  ${tmp}/IncludeList.txt
        echo "sdk.mustella.includes=${sdk_mustella_includes}" >> $propfile
        echo "sdk.mustella.swfs=${sdk_mustella_swfs}" >> $propfile


    fi

elif [ "$failed_only" = "1" ]
    then

    input=failures.txt


    list_of_files=`awk '{if (NF > 1) {print $1}}' $input | sort -u`
    list_of_failed_swfs=`awk '{if (NF == 1) {print $1}}' $input | sort -u | awk -F 'mustella/tests/' '{print $2}'`

    for i in $list_of_files
    do


    derived_swf=`dirname $i`
    derived_swf=`dirname $derived_swf`

    ## create the ant fileset type includes
    testfile="${i}.mxml";
	
	echo $testfile
	
    tmp0list="$tmp0list,$testfile"
    
	## split on the word testSWF, then split on the quotes, take the middle and replace .mxml with .swf
	swfname=`grep 'testSWF=' tests/$testfile | awk -F 'testSWF' '{print $2}' | awk -F '"' '{print $2}' | sed 's/\.mxml/\.swf/'`
    swfname=`echo $swfname | sed 's_\.\.\/SWFs\/__'`
    swfname=`echo $swfname | sed 's_\.\.\/swfs\/__'`
	
    echo $swfname
	
    if [ -d "tests/${derived_swf}/SWFs" ] 
        then
        ## backflips for windows because it will match either:
        f_lower=`ls "tests/${derived_swf}" | egrep "swfs"`
        [ $? = 0 ] &&  swf0list="$swf0list,$derived_swf/swfs/$swfname" || swf0list="$swf0list,$derived_swf/SWFs/$swfname"


    ## on unix(mac) the guess is that it would actually match correctly
    elif [ -d "tests/${derived_swf}/swfs" ] 
        then
        echo "Matched lower"
        swf0list="$swf0list,$derived_swf/swfs/$swfname"


    fi

    done

    for i in $list_of_failed_swfs
    do
	
	swf0list="$swf0list,${i}"
	done
	
    ## write properties file
    echo "sdk.mustella.includes=${tmp0list}" >> $propfile
    # echo "sdk.mustella.swfs=**/*.swf" >> $propfile
    echo "sdk.mustella.swfs=$swf0list" >> $propfile


    ## write include file
    outfile=$tmp/IncludeList.txt
    cat $input | sed -e '/^$/d' -e 's/ /$/' > $outfile

elif [ "$keyword_list" != "" ]
    then

    ## this target calls a task that takes the keywords and
    ## creates an include list
    ## and uses any includes to limit the include set


    echo "Feeding mustella includes: $sdk_mustella_includes"

    if [ "$sdk_mustella_includes" = "" ]
        then
        "$ANT_HOME/bin/ant" write_keyword_includes -Dkeyword_list=$keyword_list 
    else
        "$ANT_HOME/bin/ant" write_keyword_includes -Dkeyword_list=$keyword_list -Dsdk.mustella.includes="$sdk_mustella_includes"
    fi

    ret=$?
    echo "Return from ant was: $ret"

        
    if [ "$ret" != "0" ]
        then
        echo "Failure in the keyword run setup. See above errors. Sorry, exiting"
        exit 1;
    fi

    egrep "sdk.mustella.includes" .tmp_file_list >> $propfile
    ## this one is a bit of a hack:
    echo "sdk.mustella.swfs=**/*.swf" >> $propfile



    here=`pwd`

    ## clean that out.

    cleaning=`echo $here | egrep "cygdrive"`

    if [ "$cleaning" != "" ]
        then
        # /cygdrive/c/depot_tmp/depot/flex/qa/sdk/testsuites/mustella
        here=`echo $here | sed -e 's/\/cygdrive\/\([A-Za-z]\)/\1:/'`

    fi


    [ -d classes ] || mkdir classes
    


    extra_arg="${extra_arg} -includes=CurrentIncludeList"
    extra_arg="${extra_arg} -source-path+=${here}/classes";

    ### NEED THE ARGS

elif [ "$changes" = "1" ]
    then
    input=changes.txt


    list_of_files=`awk '{{print $1}}' $input | sort -u`

    for i in $list_of_files
    do


    derived_swf=`dirname $i`
    derived_swf=`dirname $derived_swf`

    ## create the ant fileset type includes
    testfile="${i}.mxml";
	
	echo $testfile
	
    tmp0list="$tmp0list,$testfile"
    
	## split on the word testSWF, then split on the quotes, take the middle and replace .mxml with .swf
	swfname=`grep 'testSWF=' tests/$testfile | awk -F 'testSWF' '{print $2}' | awk -F '"' '{print $2}' | sed 's/\.mxml/\.swf/'`
    swfname=`echo $swfname | sed 's_\.\.\/SWFs\/__'`
    swfname=`echo $swfname | sed 's_\.\.\/swfs\/__'`
	
    echo $swfname
	
    if [ -d "tests/${derived_swf}/SWFs" ] 
        then
        ## backflips for windows because it will match either:
        f_lower=`ls "tests/${derived_swf}" | egrep "swfs"`
        [ $? = 0 ] &&  swf0list="$swf0list,$derived_swf/swfs/$swfname" || swf0list="$swf0list,$derived_swf/SWFs/$swfname"


    ## on unix(mac) the guess is that it would actually match correctly
    elif [ -d "tests/${derived_swf}/swfs" ] 
        then
        echo "Matched lower"
        swf0list="$swf0list,$derived_swf/swfs/$swfname"


    fi

    done
	
    ## write properties file
    echo "sdk.mustella.includes=${tmp0list}" >> $propfile
    # echo "sdk.mustella.swfs=**/*.swf" >> $propfile
    echo "sdk.mustella.swfs=$swf0list" >> $propfile

else


echo "sdk.mustella.includes=${sdk_mustella_includes}" >> $propfile
echo "sdk.mustella.swfs=${sdk_mustella_swfs}" >> $propfile


    
fi


# echo "sdk.mustella.includes=${sdk_mustella_includes}" 
# echo "sdk.mustella.swfs=${sdk_mustella_swfs}"



## defaults for results fetching. 
# mini run defaults to over-the-wire results fetching (except for vetting (TEST_REVIEW))
if [ "$use_wire" = "true" ]
    then

    rezIsSet=`echo "$antArgs" | egrep "SendResultsToRunner"`

    if [ "$rezIsSet" = "" ] && [ "$TEST_REVIEW" != "1" ]
        then
        antArgs="$antArgs -Dresult_include=-includes=SendResultsToRunner -Dget_results_from_log=false"
    fi


fi
        




# avoid race to know where the build lives (hack)
mkdir build 2>/dev/null
mkdir build/lib 2>/dev/null

## give a run id so it doesn't bother getting one (we don't care).

if [ "$skipcheck" = "0" ] || [ "$TEST_REVIEW" = "1" ] 
    then
    echo "Running testcase checks/inserts...."

    ## test review implies an attended, server run
    if [ "$TEST_REVIEW" = "1" ] 
        then
        echo "As test review"
        echo "$ANT_HOME/bin/ant $mailto -Dfork_compile=true -Dsend_check_email=true -Dfeature=mustella_tmp -Dport=${port} insert_tests"
        "$ANT_HOME/bin/ant" $mailto $antArgs -Dfork_compile=true -Dsend_check_email=true -Dfeature=mustella_tmp -Dport=${port}  insert_tests
        ret=$?
    else
        echo "$ANT_HOME/bin/ant $mailto $antArgs -Dfail_on_testcase_check=true -Dfork_compile=true -Dsend_check_email=false -Ddebug_insert=true -Dfeature=mustella_tmp -Dport=$port insert_tests"
        "$ANT_HOME/bin/ant" $mailto $antArgs -Dfail_on_testcase_check=true -Dfork_compile=true -Dsend_check_email=false -Ddebug_insert=true -Dfeature=mustella_tmp -Dport=${port} insert_tests
        ret=$?
    fi

    ### NEED THE ARGS

    if [ "$ret" != "0" ]
        then
        echo "Bad return from testcase check. exiting."
        exit 1
    fi
else
    echo "Skipping testcase check"

fi


                        
if [ "$TEST_REVIEW" = "1" ] 
    then

    echo "Doing this as a Test Review."
    ant_target=sendResults

    ## let it mail a compile error  
    ## we'll do a comparison, so we need the database

    timeout=45

    echo $ANT_HOME/bin/ant  -Dsave_failures=true $mailto -Dfork_compile=true -Drun_type=mini -Dexit_on_compile_error=false  -Dinsert_results=true -Dfeature=mustella_tmp -Dsubject="$subject"  -Dsocket_mixin=SocketAddress -Dport=${port} -Dauto_exclude=true -Dflex_version=$flex_version  -Dbuild_version=$build_version -Duser_args=${extra_arg} $recipients $qa_recipients $always_recipients $antArgs -Dserver_time="$server_time" -Ddb_time="$db_time" $ant_target -Dplayer.timeout=$timeout $apollo_run

    "$ANT_HOME/bin/ant"  -Dsave_failures=true $mailto -Dfork_compile=true -Drun_type=mini -Dexit_on_compile_error=false  -Dinsert_results=true -Dfeature=mustella_tmp -Dsocket_mixin=SocketAddress -Dport=${port} -Dauto_exclude=true -Dflex_version=$flex_version  -Dbuild_version=$build_version -Duser_args=${extra_arg} $recipients $qa_recipients $always_recipients $antArgs -Dserver_time="$server_time" -Ddb_time="$db_time" $ant_target -Dplayer.timeout=$timeout $apollo_run

elif [ "$hurricane" = "1" ]
    then
    echo "hurricane!"   


    ## the generalized swfs piece: 
    # tmp_hur=`echo ${sdk_mustella_swfs} | sed -e 's/\*\*/swfs/' -e 's/\*.swf/**/'`
    tmp_hur=`echo ${sdk_mustella_swfs} | sed -e 's/\*\*/swfs/' -e 's/\*\*/swfs/' -e 's/\*.swf/**/'`
    tmp_hur2=`echo ${sdk_mustella_swfs} | sed -e 's/\*\*/SWFs/'`


    if [ "$useBranch" = "" ]
        then
        branchArg=""
    else
        branchArg="-Dbranch_name=$useBranch"
    fi
        


    $ANT_HOME/bin/ant zip_materials $branchArg -Dsdk.mustella.includes.send="${sdk_mustella_includes},${tmp_hur},${tmp_hur2}"


else



    if [ "$compileOnly" = "1" ]
        then
        ant_target=compileLite
        exit_on_compile_error=false
    fi

    if [ "$extra_arg" = "" ]
        then
        extra_arg="-includes=SetShowRTE"
    else
        extra_arg="${extra_arg} -includes=SetShowRTE"
    fi


    echo "Doing a regular mini run"


    if [ "$beVerbose" = "true" ]
        then
        echo $ANT_HOME/bin/ant $mailto -Dfork_compile=true  -Dcurrent.run.id=-1 -Dexit_on_compile_error=$exit_on_compile_error -Dinsert_results=false -Dokay_to_exit=true -Dskip_exclude=${skipexclude} -Dfeature=${propfileName} -Dinclude_list=${testName} -Dplayer.timeout=$timeout -Dprint_passes=$print_passes -Dsave_failures=true $browser_run $apollo_run -Duser_args="${extra_arg}" -Dport=${port}  -Dflex_version=$flex_version -Dbuild_version=$build_version $antArgs $ant_target -Dkeep_air=$keep
    fi


    "$ANT_HOME/bin/ant" $mailto -Dfork_compile=true  -Dcurrent.run.id=-1 -Dexit_on_compile_error=$exit_on_compile_error -Dinsert_results=false -Dokay_to_exit=true -Dskip_exclude=${skipexclude} -Dfeature=${propfileName} -Dinclude_list=${testName} -Dplayer.timeout=$timeout -Dprint_passes=$print_passes -Dsave_failures=true $browser_run $apollo_run -Duser_args="${extra_arg}" -Dport=${port}  -Dflex_version=$flex_version -Dbuild_version=$build_version $antArgs -Dserver_time="$server_time" $ant_target -Dkeep_air=$keep 

fi





