| @echo off |
| @rem Licensed to the Apache Software Foundation (ASF) under one or more |
| @rem contributor license agreements. See the NOTICE file distributed with |
| @rem this work for additional information regarding copyright ownership. |
| @rem The ASF licenses this file to You under the Apache License, Version 2.0 |
| @rem (the "License"); you may not use this file except in compliance with |
| @rem the License. You may obtain a copy of the License at |
| @rem |
| @rem http://www.apache.org/licenses/LICENSE-2.0 |
| @rem |
| @rem Unless required by applicable law or agreed to in writing, software |
| @rem distributed under the License is distributed on an "AS IS" BASIS, |
| @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| @rem See the License for the specific language governing permissions and |
| @rem limitations under the License. |
| @rem |
| |
| @rem This is a mock "Hive" shell that validates whether various test imports |
| @rem succeeded. It accepts commands of the form 'hive -f scriptname' |
| @rem and validates that the script contents match those of an expected script. |
| @rem The filename to that expected script is set via the environment variable |
| @rem EXPECTED_SCRIPT. |
| |
| @rem The script will contain a pathname as part of the LOAD DATA INPATH statement; |
| @rem depending on where you run the tests from, this can change. So the expected |
| @rem script file actually contains the marker string "BASEPATH" which is replaced |
| @rem by this script with the contents of $TMPDIR, which is set to 'test.build.data'. |
| |
| setlocal enabledelayedexpansion |
| |
| @rem Reset ERRORLEVEL if previously set |
| set ERRORLEVEL= |
| |
| if "%EXPECTED_SCRIPT%" =="" ( |
| echo No expected script set |
| set ERRORLEVEL=1 |
| goto :end |
| ) |
| |
| if "%TMPDIR%" == "" ( |
| echo setting TMPDIR to %TEMP% |
| set TMPDIR=%TEMP% |
| ) |
| |
| if not exist %TMPDIR% ( |
| md %TMPDIR% |
| ) |
| |
| if "%1" NEQ "-f" ( |
| echo "Misunderstood argument: %1" |
| echo "Expected '-f'." |
| set ERRORLEVEL=2 |
| goto :end |
| ) |
| |
| if "%2" =="" ( |
| echo "Expected: hive -f filename" |
| set ERRORLEVEL=3 |
| goto :end |
| ) |
| |
| set GENERATED_SCRIPT=%2 |
| |
| rem Generate the directory temporarily hosting copied base scripts before processing |
| set TMP_COPY_DIR=%TMPDIR%\tmp |
| if not exist %TMP_COPY_DIR% ( |
| md "%TMP_COPY_DIR%" |
| ) |
| |
| pushd |
| rem Adjust path format for TMP_COPY_DIR and TMPDIR |
| cd /d %TMP_COPY_DIR% |
| set TMP_COPY_DIR=%cd% |
| |
| cd /d %TMPDIR% |
| set TMPDIR=%cd% |
| popd |
| |
| @rem Copy the expected script into the tmpdir and replace the marker. |
| copy "%EXPECTED_SCRIPT%" "%TMP_COPY_DIR%" |
| for %%i in ("%EXPECTED_SCRIPT%") do set SCRIPT_BASE=%%~nxi |
| set COPIED_SCRIPT=%TMP_COPY_DIR%\%SCRIPT_BASE% |
| |
| @rem Replace the BASEPATH marker with actual base-path |
| set RESOLVED_BASE=/%TMPDIR:\=/% |
| |
| @rem Trim all comments from copied base scripts |
| set BASE_SCRIPT=%TMPDIR%\%SCRIPT_BASE% |
| if exist %BASE_SCRIPT% ( |
| del %BASE_SCRIPT% |
| ) |
| |
| @rem Filter all comments from the copied script |
| FOR /F "usebackq delims=" %%i in (%COPIED_SCRIPT%) do ( |
| set "line=%%i" |
| set "start=!line:~0,2!" |
| if not "!start!" == "--" ( |
| set "resolvedLine=!line:BASEPATH=%RESOLVED_BASE%!" |
| echo(!resolvedLine!>>!BASE_SCRIPT! |
| ) |
| ) |
| |
| @rem Delete the temporary folder for copied scripts |
| rd /S /Q %TMP_COPY_DIR% |
| |
| rem Actually check to see that the input we got matches up. |
| fc %BASE_SCRIPT% %GENERATED_SCRIPT% /W |
| |
| :end |
| echo Exiting with return code %ERRORLEVEL% |
| exit %ERRORLEVEL% |
| endlocal |