452 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			452 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
#compdef symfony
 | 
						|
# ------------------------------------------------------------------------------
 | 
						|
# Description
 | 
						|
# -----------
 | 
						|
#
 | 
						|
#  Completion script for Symfony (http://www.symfony-project.org).
 | 
						|
#
 | 
						|
# ------------------------------------------------------------------------------
 | 
						|
# Authors
 | 
						|
# -------
 | 
						|
#
 | 
						|
#  * aki77 (https://github.com/aki77)
 | 
						|
#
 | 
						|
# ------------------------------------------------------------------------------
 | 
						|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
 | 
						|
# vim: ft=zsh sw=2 ts=2 et
 | 
						|
# ------------------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
_symfony () {
 | 
						|
    local curcontext="$curcontext" state line expl ret=1 cache_version
 | 
						|
 | 
						|
    cache_version=$(_get_sf_cache_var version)
 | 
						|
    (( ${(P)+cache_version} == 0 )) && {
 | 
						|
        eval $cache_version=${${${(z)$($service -V)}[3]}%.*}
 | 
						|
    }
 | 
						|
 | 
						|
    if [ ${(P)cache_version} = "1.0" ] ; then
 | 
						|
        _symfony10
 | 
						|
        return
 | 
						|
    fi
 | 
						|
 | 
						|
    _arguments -C \
 | 
						|
        '(-T --tasks)'{-T,--tasks}'[list of the symfony tasks]' \
 | 
						|
        '(-V --version)'{-V,--version}'[version]' \
 | 
						|
        '1: :->tasks' \
 | 
						|
        '*:: :->args' && ret=0
 | 
						|
 | 
						|
    case $state in
 | 
						|
        tasks)
 | 
						|
            _sf_tasks
 | 
						|
            ;;
 | 
						|
        args)
 | 
						|
            local task args
 | 
						|
 | 
						|
            task=$words[1]
 | 
						|
            args=(
 | 
						|
                ${${${${${(M)${${${(z)${${"$($service help $task)"#*Usage:}#[[:cntrl:]]}%%[[:cntrl:]]*}//\[/}//\]/}:#--*}%%\"*}/=/"=-"}/(#b)--(app|application)=-/--$match[1]=-:application:_sf_apps}//(#b)--(env|environment)=-/--$match[1]=-:environment:_sf_environments}
 | 
						|
            )
 | 
						|
 | 
						|
            case $task in
 | 
						|
                help)
 | 
						|
                    args+=(
 | 
						|
                        ':task:_sf_tasks'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                app:routes)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':"route name":'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                configure:author)
 | 
						|
                    _message 'project author'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                configure:database)
 | 
						|
                    _message 'database dsn'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                generate:app)
 | 
						|
                    _message 'new application name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                generate:module)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':"new module name":'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                generate:project)
 | 
						|
                    _message 'new project name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                generate:task)
 | 
						|
                    _message 'new task name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                i18n:extract)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':"target culture":'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                i18n:find)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                log:rotate)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':environment:_sf_environments'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                plugin:add-channel)
 | 
						|
                    _message 'channel name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                plugin:install)
 | 
						|
                    _message 'plugin name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                plugin:publish-assets)
 | 
						|
                    args+=(
 | 
						|
                        ':plugin:_sf_plugins'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                plugin:uninstall)
 | 
						|
                    _message 'plugin name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                plugin:upgrade)
 | 
						|
                    _message 'plugin name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                project:deploy)
 | 
						|
                    _message 'server name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                project:disable|project:enable)
 | 
						|
                    args+=(
 | 
						|
                        ':environment:_sf_environments'
 | 
						|
                        '*:application:_sf_apps'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                project:optimize)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':environment:_sf_environments'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                propel:data-dump|doctrine:data-dump)
 | 
						|
                    _message 'target filename'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                propel:data-load|doctrine:data-load)
 | 
						|
                    args+=(
 | 
						|
                        '*:file:_files'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                propel:generate-admin)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':model:_sf_models'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                propel:generate-module|propel:init-admin)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':module:_sf_modules_candidate'
 | 
						|
                        ':model:_sf_models'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                propel:generate-module-for-route|doctrine:generate-module-for-route)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':"route name":'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                doctrine:create-model-tables|doctrine:delete-model-files)
 | 
						|
                    args+=(
 | 
						|
                        '*:model:_sf_doctrine_models'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                doctrine:generate-admin)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        '*:model:_sf_doctrine_models'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                doctrine:generate-module)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':module:_sf_doctrine_modules_candidate'
 | 
						|
                        ':model:_sf_doctrine_models'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                test:coverage)
 | 
						|
                    args+=(
 | 
						|
                        '*:file:_files'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                test:functional)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        '*:test:_sf_functionaltests'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                test:unit)
 | 
						|
                    args+=(
 | 
						|
                        '*:test:_sf_unittests'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
            esac
 | 
						|
 | 
						|
            _arguments "$args[@]" && ret=0
 | 
						|
            return
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
    return ret
 | 
						|
}
 | 
						|
 | 
						|
_symfony10 () {
 | 
						|
    local curcontext="$curcontext" state line expl ret=1
 | 
						|
 | 
						|
    _arguments -C \
 | 
						|
        '(-T --tasks)'{-T,--tasks}'[list of the symfony tasks]' \
 | 
						|
        '(-V --version)'{-V,--version}'[version]' \
 | 
						|
        '1: :->tasks' \
 | 
						|
        '*:: :->args' && ret=0
 | 
						|
 | 
						|
    case $state in
 | 
						|
        tasks)
 | 
						|
            _sf10_tasks
 | 
						|
            ;;
 | 
						|
        args)
 | 
						|
            local task args
 | 
						|
 | 
						|
            task=$words[1]
 | 
						|
            args=()
 | 
						|
 | 
						|
            case $task in
 | 
						|
                init-project)
 | 
						|
                    _message 'new project name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                init-app)
 | 
						|
                    _message 'application name'
 | 
						|
                    ;;
 | 
						|
 | 
						|
                init-module)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                init-batch)
 | 
						|
                    args+=(
 | 
						|
                        ':skeleton name:compadd default rotate'
 | 
						|
                        ':"script name":'
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                    )
 | 
						|
                ;;
 | 
						|
 | 
						|
                init-controller)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':environment:_sf_environments'
 | 
						|
                        ':"script name":'
 | 
						|
                        ':"debug?":compadd true false'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                log-rotate)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':environment:_sf_environments'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                propel-load-data|propel-build-all-load)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':environment:_sf_environments'
 | 
						|
                        ':fixtures:_sf_fixtures'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                clear-cache|cc)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':what:compadd template config'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                sync)
 | 
						|
                    args+=(
 | 
						|
                        ':environment:_sf_environments'
 | 
						|
                        ':"real run?":compadd go'
 | 
						|
                    )
 | 
						|
                ;;
 | 
						|
 | 
						|
                propel-init-crud|propel*-init-admin|propel-generate-crud)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':module:_sf_modules_candidate'
 | 
						|
                        ':model:_sf_models'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                doctrine-init-admin|doctrine-generate-crud)
 | 
						|
                    args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':module:_sf_doctrine_modules_candidate'
 | 
						|
                        ':model:_sf_doctrine_models'
 | 
						|
                    )
 | 
						|
                ;;
 | 
						|
 | 
						|
                test-unit)
 | 
						|
                    args+=(
 | 
						|
                        ':test:_sf_unittests'
 | 
						|
                    )
 | 
						|
                    ;;
 | 
						|
 | 
						|
                test-functional)
 | 
						|
                   args+=(
 | 
						|
                        ':application:_sf_apps'
 | 
						|
                        ':test:_sf_functionaltests'
 | 
						|
                    )
 | 
						|
                ;;
 | 
						|
 | 
						|
            esac
 | 
						|
 | 
						|
            _arguments "$args[@]" && ret=0
 | 
						|
            return
 | 
						|
            ;;
 | 
						|
    esac
 | 
						|
    return ret
 | 
						|
}
 | 
						|
 | 
						|
_sf_tasks () {
 | 
						|
    local tmp ns line cache_task
 | 
						|
 | 
						|
    cache_task=$(_get_sf_cache_var task)
 | 
						|
    (( ${(P)+cache_task} == 0 )) && {
 | 
						|
        tmp=(
 | 
						|
            ${${${(f)${"$($service -T)"##*Available tasks:}}##[[:blank:]][[:blank:]]}%%[[:blank:]]*}
 | 
						|
        )
 | 
						|
        eval "$cache_task=()"
 | 
						|
        ns=''
 | 
						|
 | 
						|
        for line in $tmp; do
 | 
						|
            if [ $line[1] = ":" ] ; then
 | 
						|
                eval "$cache_task+=( ${ns}${line#:} )"
 | 
						|
            else
 | 
						|
                ns="${line}:"
 | 
						|
            fi
 | 
						|
        done
 | 
						|
    }
 | 
						|
 | 
						|
    _wanted symfony-task expl 'Symfony task' compadd -a $cache_task
 | 
						|
}
 | 
						|
 | 
						|
_sf10_tasks () {
 | 
						|
    local sf_tasks
 | 
						|
 | 
						|
    sf_tasks=(
 | 
						|
        ${${${(f)${"$($service -T)"#available pake tasks:}%%task aliases:*}#[[:blank:]][[:blank:]]}/[[:blank:]]*>[[:blank:]]/:}
 | 
						|
    )
 | 
						|
 | 
						|
    _describe -t symfony-tasks 'Symfony task' sf_tasks
 | 
						|
}
 | 
						|
 | 
						|
_sf_apps () {
 | 
						|
    _wanted application expl 'application' compadd \
 | 
						|
        ${$(echo apps/*):t}
 | 
						|
}
 | 
						|
 | 
						|
_sf_environments () {
 | 
						|
    local app
 | 
						|
 | 
						|
    app=$([ -f apps/"$words[2]"/config/settings.yml ] && echo $words[2] || echo frontend)
 | 
						|
    if [ -r apps/$app/config/settings.yml ] ; then
 | 
						|
        _wanted environment expl 'environment' compadd \
 | 
						|
            ${${${(M)${(@f)"$(<apps/$app/config/settings.yml)"}:#[[:alpha:]]*}%%:*}:#all}
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
_sf_plugins () {
 | 
						|
    _wanted application expl 'plugin' compadd \
 | 
						|
        ${$(echo plugins/*):t}
 | 
						|
}
 | 
						|
 | 
						|
_sf_models () {
 | 
						|
    _wanted application expl 'model' compadd \
 | 
						|
        $(_get_sfmodels)
 | 
						|
}
 | 
						|
 | 
						|
_sf_doctrine_models () {
 | 
						|
    _wanted model expl 'model' compadd \
 | 
						|
        $(_get_sf_doctrine_models)
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
_sf_modules_candidate () {
 | 
						|
    _wanted module expl 'module' compadd \
 | 
						|
        ${$(_get_sfmodels):l}
 | 
						|
}
 | 
						|
 | 
						|
_sf_doctrine_modules_candidate () {
 | 
						|
    _wanted module expl 'module' compadd \
 | 
						|
        ${$(_get_sf_doctrine_models):l}
 | 
						|
}
 | 
						|
 | 
						|
_sf_unittests () {
 | 
						|
    _wanted test expl 'test' compadd \
 | 
						|
        ${${${$(echo test/unit/**/*Test.php):r}#test/unit/}%Test}
 | 
						|
}
 | 
						|
 | 
						|
_sf_functionaltests () {
 | 
						|
    _wanted test expl 'test' compadd \
 | 
						|
        ${${$(echo test/functional/$words[2]/*ActionsTest.php):t:r}%Test}
 | 
						|
}
 | 
						|
 | 
						|
_sf_fixtures () {
 | 
						|
    _files -W $(pwd)/data
 | 
						|
}
 | 
						|
 | 
						|
_get_sfmodels () {
 | 
						|
    echo ${${$(echo lib/model/*Peer.php):t:r}%Peer}
 | 
						|
}
 | 
						|
 | 
						|
_get_sf_doctrine_models () {
 | 
						|
    echo ${${$(echo lib/model/doctrine/*Table.class.php):t:r:r}%Table}
 | 
						|
}
 | 
						|
 | 
						|
_get_sf_cache_var () {
 | 
						|
    echo ${$(echo "_sf_cache_${(j:_:)@}$(pwd)")//[^[:alnum:]]/_}
 | 
						|
}
 | 
						|
 | 
						|
_symfony "$@"
 |