浏览代码

mvn: add dynamic profile support to mvn completion

* Maven profiles for current pom.xml file
* Maven profiles for pom hierarchy
* Ommiting comments in profiles
kubamarchwicki 10 年之前
父节点
当前提交
fff756069f
共有 1 个文件被更改,包括 63 次插入0 次删除
  1. 63 0
      plugins/mvn/mvn.plugin.zsh

+ 63 - 0
plugins/mvn/mvn.plugin.zsh

@@ -68,8 +68,66 @@ alias mvntc='mvn tomcat:run'
 alias mvntc7='mvn tomcat7:run'
 alias mvn-updates='mvn versions:display-dependency-updates'
 
+#realpath replacement for iOS - not always present
+function _realpath {
+	if [[ -f "$1" ]]
+	then
+		# file *must* exist
+		if cd "$(echo "${1%/*}")" &>/dev/null
+		then
+			# file *may* not be local
+			# exception is ./file.ext
+			# try 'cd .; cd -;' *works!*
+			local tmppwd="$PWD"
+			cd - &>/dev/null
+		else
+			# file *must* be local
+			local tmppwd="$PWD"
+		fi
+	else
+		# file *cannot* exist
+		return 1 # failure
+	fi
+
+	# reassemble realpath
+	echo "$tmppwd"/"${1##*/}"
+	return 1 #success
+}
+
+function __pom_hierarchy {
+	local file=`_realpath "pom.xml"`
+	POM_HIERARCHY+=("~/.m2/settings.xml")
+	POM_HIERARCHY+=("$file")
+	while [ -n "$file" ] && grep -q "<parent>" $file; do
+		##look for a new relativePath for parent pom.xml
+		local new_file=`grep -e "<relativePath>.*</relativePath>" $file | sed 's/.*<relativePath>//' | sed 's/<\/relativePath>.*//g'`
+
+		## <parent> is present but not defined. Asume ../pom.xml
+		if [ -z "$new_file" ]; then
+			new_file="../pom.xml"
+		fi
+
+		## if file exists continue else break
+		new_pom=`_realpath "${file%/*}/$new_file"`
+		if [ -n "$new_pom" ]; then
+			file=$new_pom
+		else
+			break
+		fi
+		POM_HIERARCHY+=("$file")
+	done
+}
 
 function listMavenCompletions {
+	POM_HIERARCHY=()
+	__pom_hierarchy
+
+	profiles=()
+	#current pom profiles
+	for item in ${POM_HIERARCHY[*]}; do
+		profiles=($profiles `[ -e $item ] && cat $item | sed 's/<!--.*-->//' | sed '/<!--/,/-->/d' | grep -e "<profile>" -A 1 | grep -e "<id>.*</id>" | sed 's?.*<id>\(.*\)<\/id>.*?-P\1?'`)
+	done
+
 	reply=(
 		# common lifecycle
 		clean initialize process-resources compile process-test-resources test-compile test package verify install deploy site
@@ -278,7 +336,12 @@ function listMavenCompletions {
 		cobertura:cobertura
 		-Dtest=$(if [ -d ./src/test/java ] ; then find ./src/test/java -type f -name '*.java' | grep -v svn | sed 's?.*/\([^/]*\)\..*?-Dtest=\1?' ; fi)
 		-Dit.test=$(if [ -d ./src/test/java ] ; then find ./src/test/java -type f -name '*.java' | grep -v svn | sed 's?.*/\([^/]*\)\..*?-Dit.test=\1?' ; fi)
+
+		$profiles
 	)
+
+	unset POM_HIERARCHY
+	unset profiles
 }
 
 compctl -K listMavenCompletions mvn mvnw