Skip to content

Instantly share code, notes, and snippets.

@edannenberg
Created April 11, 2012 08:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edannenberg/2358077 to your computer and use it in GitHub Desktop.
Save edannenberg/2358077 to your computer and use it in GitHub Desktop.
Bash completition for maven-magento-plugin.
# Programmable completion for the Maven mvn command under bash. Source
# this file (or on some systems add it to ~/.bash_completion and start a new
# shell) and bash's completion mechanism will know all about mvn's options!
#
# Copyright (C) 2009, Ludovic Claude <ludovic.claude@laposte.net>
# Base on git completion script, Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
# Distributed under the GNU General Public License, version 2.0.
# Customization: you can always edit this file (as root) and add or remove plugins and options in the lists defined below.
# If you have some interesting changes, please send patches to ludovic.claude@laposte.net
# Alternatively, you can create a file called bash_completion in your ~/.m2 directory.
# This file can override any of the variables defined below (__mvnopts, __mvnoptsWithArg __mvnparams, __mvnpackaging,
# __mvnclassifiers, __mvndefault_phases, __mvnclean_phases, __mvnsite_phases, __mvncore_plugins, __mvnpackaging_plugins,
# __mvnreporting_plugins, __mvntools_plugins, __mvnide_plugins, __mvnother_plugins, __mvncustom_plugins)
# __mvncustom_plugins is the best variable to use to add new plugins and goals
#
__mvnopts="--also-make --also-make-dependents --file --debug --batch-mode --lax-checksums --strict-checksums --check-plugin-updates --define
--errors --encrypt-master-password --encrypt-password --fail-at-end --fail-fast --fail-never --help --non-recursive --no-plugin-registry
--no-plugin-updates --offline --activate-profiles --projects --quiet --reactor --resume-from --settings --global-settings --update-snapshots
--update-plugins --version --show-version"
__mvnoptsWithArg="--file|--define|--encrypt-master-password|--encrypt-password|--resume-from|--settings|--global-settings|--activate-profiles|--projects"
__mvnparams="-Dmaven.test.skip=true -Dsurefire.useFile=false -Dmaven.surefire.debug -Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -Dverbose -Dmaven.test.failure.ignore=true"
__mvnpackaging="pom jar maven-plugin php ejb war ear rar par"
__mvnclassifiers="sources test-jar"
__mvnscopes="compile test runtime system"
# phases for the default lifecycle
__mvndefault_phases="validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile
process-test-classes
test
package
pre-integration-test
integration-test
post-integration-test
verify
install
deploy"
# phases for the clean lifecycle
__mvnclean_phases="pre-clean
clean
post-clean"
# phases for the site lifecycle
__mvnsite_phases="pre-site
site
post-site
site-deploy"
# core plugin targets
__mvncore_plugins="clean:clean
clean:help
compiler:compile
compiler:testCompile
compiler:help
deploy:deploy
deploy:deploy-file
deploy:help
install:install
install:install-file
install:help
resources:resources
resources:testResources
resources:copy-resources
resources:help
site:site
site:deploy
site:run
site:stage
site:stage-deploy
site:attach-descriptor
site:jar
site:help
surefire:test
surefire:help
verifier:verify
verifier:help"
# packaging plugin targets
__mvnpackaging_plugins="ear:ear
ear:generate-application-xml
ear:help
jar:jar
jar:test-jar
jar:sign
jar:sign-verify
jar:help
rar:rar
rar:help
war:war
war:exploded
war:inplace
war:manifest
war:help
shade:shade
shade:help"
# reporting plugin targets
__mvnreporting_plugins="changelog:changelog
changelog:dev-activity
changelog:file-activity
changelog:help
changes:announcement-mail
changes:announcement-generate
changes:changes-report
changes:jira-report
changes:changes-validate
changes:help
checkstyle:checkstyle
checkstyle:check
checkstyle:help
doap:generate
doap:help
docck:check
docck:help
javadoc:javadoc
javadoc:test-javadoc
javadoc:aggregate
javadoc:test-aggregate
javadoc:jar
javadoc:test-jar
javadoc:help
jxr:jxr
jxr:test-jxr
jxr:help
pmd:pmd
pmd:cpd
pmd:check
pmd:cpd-check
pmd:help
project-info-reports:cim
project-info-reports:dependencies
project-info-reports:dependency-convergence
project-info-reports:dependency-management
project-info-reports:index
project-info-reports:issue-tracking
project-info-reports:license
project-info-reports:mailing-list
project-info-reports:plugin-management
project-info-reports:project-team
project-info-reports:scm
project-info-reports:summary
project-info-reports:help
surefire-report:report
surefire-report:report-only
surefire-report:help"
# tools plugin targets
__mvntools_plugins="ant:ant
ant:clean
ant:help
antrun:run
antrun:help
archetype:create
archetype:generate
archetype:create-from-project
archetype:crawl
archetype:help
assembly:assembly
assembly:directory
assembly:directory-single
assembly:single
assembly:help
dependency:copy
dependency:copy-dependencies
dependency:unpack
dependency:unpack-dependencies
dependency:resolve
dependency:list
dependency:sources
dependency:resolve-plugins
dependency:go-offline
dependency:purge-local-repository
dependency:build-classpath
dependency:analyze
dependency:analyze-dep-mgt
dependency:tree
dependency:help
enforcer:enforce
enforcer:display-info
enforcer:help
gpg:sign
gpg:sign-and-deploy-file
gpg:help
help:active-profiles
help:all-profiles
help:describe
help:effective-pom
help:effective-settings
help:evaluate
help:expressions
help:system
invoker:install
invoker:run
invoker:help
one:convert
one:deploy-maven-one-repository
one:install-maven-one-repository
one:maven-one-plugin
one:help
patch:apply
patch:help
pdf:pdf
pdf:help
plugin:descriptor
plugin:report
plugin:updateRegistry
plugin:xdoc
plugin:addPluginArtifactMetadata
plugin:helpmojo
plugin:help
release:clean
release:prepare
release:rollback
release:perform
release:stage
release:branch
release:help
reactor:resume
reactor:make
reactor:make-dependents
reactor:make-scm-changes
reactor:help
remote-resources:bundle
remote-resources:process
remote-resources:help
repository:bundle-create
repository:bundle-pack
repository:help
scm:branch
scm:validate
scm:add
scm:unedit
scm:export
scm:bootstrap
scm:changelog
scm:list
scm:checkin
scm:checkout
scm:status
scm:update
scm:diff
scm:update-subprojects
scm:edit
scm:tag
scm:help
source:aggregate
source:jar
source:test-jar
source:jar-no-fork
source:test-jar-no-fork
source:help
stage:copy
stage:help"
# IDE plugin targets
__mvnide_plugins="eclipse:clean
eclipse:configure-workspace
eclipse:eclipse
eclipse:help
eclipse:install-plugins
eclipse:m2eclipse
eclipse:make-artifacts
eclipse:myeclipse
eclipse:myeclipse-clean
eclipse:rad
eclipse:rad-clean
eclipse:remove-cache
eclipse:to-maven
idea:clean
idea:help
idea:idea
idea:module
idea:project
idea:workspace"
__mvnother_plugins=""
__mvncustom_plugins="magento:artifact magento:archetype magento:create-db magento:deploy magento:drop-db magento:dump-db magento:import-db magento:info magento:help magento:patch magento:setup magento:setup-test magento:snippet magento:symlink"
### End of customizable area
if [ -e ~/.m2/bash_completion ]; then
source ~/.m2/bash_completion
fi
__mvnphases="${__mvndefault_phases} ${__mvnclean_phases} ${__mvnsite_phases}"
__mvnall_plugin_and_goals="${__mvncore_plugins} ${__mvnpackaging_plugins} ${__mvnreporting_plugins} ${__mvntools_plugins}
${__mvnide_plugins} ${__mvnother_plugins} ${__mvncustom_plugins}"
__mvnplugins=$(echo ${__mvnall_plugin_and_goals} | sed -re 's/:[^ \t]+/:\n/g' | sort -u | sed 's/[\s\n]//g')
__mvncomp_1 ()
{
local c IFS=' '$'\t'$'\n'
for c in $1; do
case "$c$2" in
--*=*) printf %s$'\n' "$c$2" ;;
*.) printf %s$'\n' "$c$2" ;;
*) printf %s$'\n' "$c$2 " ;;
esac
done
}
__mvncomp ()
{
local genOpt=
if [ "$1" == "-nospace" ]; then
genOpt="true"
shift
fi
local cur="${COMP_WORDS[COMP_CWORD]}"
if [ $# -gt 2 ]; then
cur="$3"
fi
case "$cur" in
-*=)
COMPREPLY=()
;;
*)
local IFS=$'\n'
COMPREPLY=($(compgen -P "$2" \
-W "$(__mvncomp_1 "$1" "$4")" \
-- "$cur"))
;;
esac
}
__mvnlist_projects ()
{
local poms=$(find . -name pom.xml -print)
echo $poms | while read -d ' ' POM; do
local DIR=$(dirname "$POM")
if [[ "$DIR" != "." ]]; then
echo "${DIR#./}"
fi
done
}
__mvnlist_goals ()
{
local plugin=$1
local pfx=""
if [[ "$2" ]]; then
pfx=$2
fi
echo ${__mvnall_plugin_and_goals} | tr ' ' '\n' | grep "$plugin" | sed "s/.*:/${pfx}/g"
}
__mvnlist_poms ()
{
for x in `find -type f -name pom.xml -or -name *.pom` ; do echo ${x#./} ; done
}
__mvnlist_jars ()
{
for x in `find -type f -name *.jar` ; do echo ${x#./} ; done
}
__mvnlist_prefix ()
{
local pfx=$1 IFS=' '$'\t'$'\n'
shift
local list=$@
for c in $list; do
echo "$pfx$c"
done
}
__mvnprefix_equals ()
{
local cur=$1
local pfx=""
case "$COMP_WORDBREAKS" in
*=*) : great ;;
*) pfx="${cur%%=*}=" ;;
esac
echo $pfx
}
__mvnprefix_colon ()
{
local cur=$1
local pfx=""
case "$COMP_WORDBREAKS" in
*:*) : great ;;
*) pfx="${cur%%:*}:" ;;
esac
echo $pfx
}
__mvnprefix_comma ()
{
local cur=$1
local pfx=""
case "$COMP_WORDBREAKS" in
*,*) : great ;;
*) pfx="${cur%%,*}," ;;
esac
echo $pfx
}
__mvnplugin_help ()
{
local plugin=$1
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
goal=*)
__mvncomp "$(__mvnlist_goals $plugin)" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
__mvncomp "detail lineLength= indentSize= $(__mvnlist_goals $plugin 'goal=')" "-D" "${cur}"
;;
esac
}
__mvnhelp_describe ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
cmd=*:*)
local plugin="${cur#*=}"
plugin="${plugin%%:*}:"
__mvncomp "$(__mvnlist_goals $plugin)" "$(__mvnprefix_colon $cur)" "${cur#*:}"
;;
cmd=*)
__mvncomp "${__mvnphases} ${__mvnall_plugin_and_goals}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
plugin=*)
__mvncomp "org.apache.maven.plugins:maven-" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
groupId=*)
__mvncomp "org.apache.maven.plugins" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
artifactId=*)
__mvncomp "" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
# present several cmd= options to block full completion and insertion of a space
__mvncomp "detail cmd=press cmd=tab plugin= groupId= artifactId=" "-D" "${cur}"
;;
esac
}
__mvndeploy_deploy ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
__mvncomp "altDeploymentRepository= skip=true updateReleaseInfo=true" "-D" "${cur}"
}
__mvndeploy_deploy_file ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
file=*)
COMPREPLY=( $( compgen -f -P "$(__mvnprefix_equals $cur)" -- "${cur#*=}" ) )
;;
pomFile=*)
__mvncomp "$(__mvnlist_poms)" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
packaging=*)
__mvncomp "${__mvnpackaging}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
local options="artifactId= classifier= description= file=press file=tab generatePom=true groupId= pomFile=press pomFile=tab repositoryId=
repositoryLayout=legacy uniqueVersion=false url= version="
options="$options $(__mvnlist_prefix 'packaging=' ${__mvnpackaging} )"
__mvncomp "$options" "-D" "${cur}"
;;
esac
}
__mvninstall_install_file ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
file=*)
COMPREPLY=( $( compgen -f -P "$(__mvnprefix_equals $cur)" -- "${cur#*=}" ) )
;;
pomFile=*)
__mvncomp "$(__mvnlist_poms)" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
sources=*)
__mvncomp "$(__mvnlist_jars)" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
javadoc=*)
__mvncomp "$(__mvnlist_jars)" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
packaging=*)
__mvncomp "${__mvnpackaging}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
local options="artifactId= classifier= file=press file=tab generatePom=true groupId= pomFile=press pomFile=tab
createChecksum=true url= version= sources=press sources=tab javadoc=press javadoc=tab"
options="$options $(__mvnlist_prefix 'packaging=' ${__mvnpackaging} )"
__mvncomp "$options" "-D" "${cur}"
;;
esac
}
__mvnexec_java ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
if [[ "${cur}" == "=" ]]; then
cur="${COMP_WORDS[COMP_CWORD-1]}="
fi
cur="${cur#-Dexec.}"
case "${cur}" in
classpathScope=*)
__mvncomp "${__mvnscopes}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
local options="mainClass= args= arguments= includeProjectDependencies=false includePluginDependencies=true
classpathScope=press classpathScope=tab
cleanupDaemonThreads=false daemonThreadJoinTimeout= stopUnresponsiveDaemonThreads="
__mvncomp "$options" "-Dexec." "${cur}"
;;
esac
}
__mvnarchetype_generate ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
basedir=*)
COMPREPLY=( $( compgen -d -P "$(__mvnprefix_equals $cur)" -- "${cur#*=}" ) )
;;
*)
local options="archetypeArtifactId= archetypeCatalog= archetypeGroupId= archetypeRepository= archetypeVersion= basedir=press basedir=tab goals= interactiveMode="
__mvncomp "$options" "-D" "${cur}"
;;
esac
}
__mvndependency_x_dependencies ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
classifier=*)
__mvncomp "${__mvnclassifiers}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
__mvncomp "$(__mvnlist_prefix 'classifier=' ${__mvnclassifiers})" "-D" "${cur}"
;;
esac
}
__mvndependency_resolve ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
classifier=*)
__mvncomp "${__mvnclassifiers}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
__mvncomp "$(__mvnlist_prefix 'classifier=' ${__mvnclassifiers}) excludeArtifactIds= excludeClassifiers= excludeGroupIds=
excludeScope= excludeTransitive=true excludeTypes= includeArtifactIds= includeClassifiers= includeGroupIds= includeScope=
includeTypes= markersDirectory= outputAbsoluteArtifactFilename= outputFile= outputScope=false overWriteIfNewer=false
overWriteReleases=true overWriteSnapshots=true silent=true type="
"-D" "${cur}"
;;
esac
}
__mvndependency_purge_local_repository ()
{
local fuzziness="file version artifactId groupId"
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
resolutionFuzziness=*)
__mvncomp "${fuzziness}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
__mvncomp "actTransitively=false exclude= reResolve=false verbose=true
$(__mvnlist_prefix 'resolutionFuzziness=' ${fuzziness})"
"-D" "${cur}"
;;
esac
}
__mvndependency_analyze ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
__mvncomp "ignoreNonCompile=true outputXML=true scriptableFlag= scriptableOutput=true verbose=true" "-D" "${cur}"
}
__mvndependency_analyze_dep_mgt ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
__mvncomp "ignoreDirect=false" "-D" "${cur}"
}
__mvndependency_tree ()
{
local tokens="whitespace standard extended"
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
tokens=*)
__mvncomp "${tokens}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
__mvncomp "excludes= includes= outputFile= scope= verbose=true
$(__mvnlist_prefix 'tokens=' ${tokens})"
"-D" "${cur}"
;;
esac
}
__mvnrelease_prepare ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
__mvncomp "username= dryRun=true" "-D" "${cur}"
}
__mvnscm_checkin ()
{
local versionType="branch tag revision"
local cur="${COMP_WORDS[COMP_CWORD]}"
cur="${cur#-D}"
case "${cur}" in
scmVersionType=*)
__mvncomp "${versionType}" "$(__mvnprefix_equals $cur)" "${cur#*=}"
;;
*)
__mvncomp "username= message= passphrase= password= scmVersion= $(__mvnlist_prefix 'scmVersionType=' ${versionType})" "-D" "${cur}"
;;
esac
}
_mvn ()
{
local i prev c=1 cmd option optionArg=0 cmdcomplete=0
local cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=()
#echo " cur $cur"
# discover the options and the command
while [ $c -le $COMP_CWORD ]; do
prev=$i
i="${COMP_WORDS[c]}"
c=$((++c))
optionArg=0
# skip option argument
if [[ $prev == @(${__mvnoptsWithArg}) ]]; then
optionArg=1
continue;
fi
#echo "c $c i '$i'"
if [[ $cmdcomplete == -3 ]]; then
cmdcomplete=1 # complete command
break;
fi
if [[ "$i" == "" ]]; then
if [[ $cmd ]]; then
cmdcomplete=1 # complete command
break;
fi
continue
fi
if [[ "$i" == ":" ]]; then
if [[ $cmd ]]; then
cmdcomplete=$((cmdcomplete-1))
cmd="${cmd}:"
fi
continue
fi
case "$i" in
--version|--help) return ;;
-*) option="$i" ;;
*) if [[ ! $cmd ]]; then
# incomplete command
cmdcomplete=$((cmdcomplete-1))
cmd="$i"
local next=$c
if [[ $next -lt $COMP_CWORD ]]; then
#echo "next ${COMP_WORDS[next]}"
if [[ "${COMP_WORDS[next]}" != ":" ]]; then
break
fi
fi
else
cmdcomplete=$((cmdcomplete-1))
cmd="$cmd$i"
fi
;;
esac
done
#echo "cmd $cmd cmdcomplete $cmdcomplete"
if [[ ! $cmd && $option && ($optionArg == 0) ]]; then
case "$option" in
--file)
__mvncomp "$(__mvnlist_poms)"
return
;;
--define)
__mvncomp "maven.test.skip=true"
return
;;
--resume-from)
__mvncomp "$(__mvnlist_projects)"
return
;;
--projects)
case "${cur}" in
*,*)
__mvncomp "$(__mvnlist_projects)" "$(__mvnprefix_comma $cur)" "${cur#*,}"
;;
*) __mvncomp "$(__mvnlist_projects)"
;;
esac
return
;;
--settings|--global-settings)
COMPREPLY=( $( compgen -f -- $cur ) )
return
;;
--*)
COMPREPLY=()
;;
esac
fi
if [ $cmdcomplete -lt 0 ]; then
#echo "incomplete cmd $cmd"
case "${cmd}" in
*:)
local plugin="${cmd%%:}:"
#echo "plugin $plugin"
__mvncomp "$(__mvnlist_goals $plugin)" "$(__mvnprefix_colon $cmd)" ""
;;
*:*)
local plugin="${cmd%%:*}:"
#echo "plugin $plugin"
__mvncomp "$(__mvnlist_goals $plugin)" "$(__mvnprefix_colon $cmd)" "${cmd#*:}"
;;
*) __mvncomp "${__mvnphases} ${__mvnall_plugin_and_goals}" ;;
esac
return
fi
if [ -z "$cmd" ]; then
#echo "empty cmd cur $cur"
case "${cur}" in
-D*=*) COMPREPLY=() ;;
-*) __mvncomp "${__mvnopts} ${__mvnparams}" ;;
--*) __mvncomp "${__mvnopts}" ;;
*) __mvncomp "${__mvnphases} ${__mvnall_plugin_and_goals}" ;;
esac
return
fi
#echo "cmd $cmd"
case "$cmd" in
*:help)
local plugin="${cmd%%:*}:"
__mvnplugin_help $plugin
;;
help:describe) __mvnhelp_describe ;;
deploy:deploy) __mvndeploy_deploy ;;
deploy:deploy-file) __mvndeploy_deploy_file ;;
archetype:generate) __mvnarchetype_generate ;;
dependency:copy-dependencies) __mvndependency_x_dependencies ;;
dependency:unpack-dependencies) __mvndependency_x_dependencies ;;
dependency:resolve) __mvndependency_resolve ;;
dependency:resolve-plugins) __mvndependency_resolve ;;
dependency:source) __mvndependency_resolve ;;
dependency:go-offline) __mvndependency_resolve ;;
dependency:purge-local-repository) __mvndependency_purge_local_repository ;;
dependency:analyze) __mvndependency_analyze ;;
dependency:analyze-dep-mgt) __mvndependency_analyze_dep_mgt ;;
exec:java) __mvnexec_java ;;
install:install-file) __mvninstall_install_file ;;
release:prepare) __mvnrelease_prepare ;;
scm:checkin) __mvnscm_checkin ;;
*)
;;
esac
}
complete -o default -o nospace -F _mvn mvn mvnDebug
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment