[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/DEPMGMT-INCLUDE
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%"
 

Reply via email to