[MNG-5889] .mvn directory should be picked when using --file Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/f8ab2a65 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/f8ab2a65 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/f8ab2a65
Branch: refs/heads/MNG-6169 Commit: f8ab2a650f32d5d87126d341d9bbfccbf99fd0ca Parents: 19d5b9d Author: robert.patrick <robert.patr...@oracle.com> Authored: Thu Sep 15 09:53:06 2016 -0500 Committer: Hervé Boutemy <hbout...@apache.org> Committed: Tue Feb 14 07:51:20 2017 +0100 ---------------------------------------------------------------------- apache-maven/src/bin/mvn | 31 +++++++++++++++++++-- apache-maven/src/bin/mvn.cmd | 58 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 83 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/f8ab2a65/apache-maven/src/bin/mvn ---------------------------------------------------------------------- diff --git a/apache-maven/src/bin/mvn b/apache-maven/src/bin/mvn index 4db1ad6..95a407d 100755 --- a/apache-maven/src/bin/mvn +++ b/apache-maven/src/bin/mvn @@ -121,7 +121,7 @@ fi # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { ( - basedir="`pwd`" + basedir=`find_file_argument_basedir "$@"` wdir="`pwd`" while [ "$wdir" != '/' ] ; do if [ -d "$wdir"/.mvn ] ; then @@ -134,6 +134,33 @@ find_maven_basedir() { ) } +find_file_argument_basedir() { +( + basedir="`pwd`" + + found_file_switch=0 + for arg in "$@"; do + if [ ${found_file_switch} -eq 1 ]; then + if [ -f ${arg} ]; then + basedir=$(dirname $(readlink -f "${arg}")) + if [ ! -d ${basedir} ]; then + echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2 + exit 1 + fi + else + echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2 + exit 1 + fi + break + fi + if [ "$arg" = "-f" -o "$arg" = "--file" ]; then + found_file_switch=1 + fi + done + echo "${basedir}" +) +} + # concatenates all lines of a file concat_lines() { if [ -f "$1" ]; then @@ -141,7 +168,7 @@ concat_lines() { fi } -MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir`}" +MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}" MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS" # For Cygwin, switch project base directory path to Windows format before http://git-wip-us.apache.org/repos/asf/maven/blob/f8ab2a65/apache-maven/src/bin/mvn.cmd ---------------------------------------------------------------------- diff --git a/apache-maven/src/bin/mvn.cmd b/apache-maven/src/bin/mvn.cmd index ecee20c..e527188 100644 --- a/apache-maven/src/bin/mvn.cmd +++ b/apache-maven/src/bin/mvn.cmd @@ -83,26 +83,76 @@ set MAVEN_CMD_LINE_ARGS=%* @REM Find the project basedir, i.e., the directory that contains the folder ".mvn". @REM Fallback to current working directory if not found. -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +set "MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%" if not "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir set "EXEC_DIR=%CD%" set "WDIR=%EXEC_DIR%" +@REM Look for the --file switch and start the search for the .mvn directory from the specified +@REM POM location, if supplied. + +set FILE_ARG= +:arg_loop +if "%~1" == "-f" ( + set "FILE_ARG=%~2" + shift + goto process_file_arg +) +if "%~1" == "--file" ( + set "FILE_ARG=%~2" + shift + goto process_file_arg +) +@REM If none of the above, skip the argument +shift +if not "%~1" == "" ( + goto arg_loop +) else ( + goto findBaseDir +) + +:process_file_arg +if "%FILE_ARG%" == "" ( + goto findBaseDir +) +if not exist "%FILE_ARG%" ( + echo POM file %FILE_ARG% specified the -f/--file command-line argument does not exist >&2 + goto error +) +call :get_directory_from_file %FILE_ARG% +if not exist "%POM_DIR%" ( + echo Directory %POM_DIR% extracted from the -f/--file command-line argument %FILE_ARG% does not exist >&2 + goto error +) +set "WDIR=%POM_DIR%" +goto findBaseDir + +:get_directory_from_file +set "POM_DIR=%~dp1" +:stripPomDir +if not "_%POM_DIR:~-1%"=="_\" goto pomDirStripped +set "POM_DIR=%POM_DIR:~0,-1%" +goto stripPomDir +:pomDirStripped +exit /b + :findBaseDir +cd /d "%WDIR%" +:findBaseDirLoop if exist "%WDIR%\.mvn" goto baseDirFound cd .. IF "%WDIR%"=="%CD%" goto baseDirNotFound set "WDIR=%CD%" -goto findBaseDir +goto findBaseDirLoop :baseDirFound set "MAVEN_PROJECTBASEDIR=%WDIR%" -cd "%EXEC_DIR%" +cd /d "%EXEC_DIR%" goto endDetectBaseDir :baseDirNotFound -if "_%EXEC_DIR:~-1%"=="_\" set EXEC_DIR=%EXEC_DIR:~0,-1% +if "_%EXEC_DIR:~-1%"=="_\" set "EXEC_DIR=%EXEC_DIR:~0,-1%" set "MAVEN_PROJECTBASEDIR=%EXEC_DIR%" cd "%EXEC_DIR%"