debian/cubicweb-ctl.bash_completion
author Julien Cristau <julien.cristau@logilab.fr>
Mon, 07 Apr 2014 18:04:56 +0200
changeset 9636 e35ae8617c03
parent 1898 39b37f90a8a4
permissions -rw-r--r--
Fix constraint sync during migration - restore constraints lost during merge in test schema. - use constraint_by_eid in BeforeDeleteCWConstraintHook as done in 3.17.14 for BeforeDeleteConstrainedByHook. Fixes handling of multiple constraints of the same type. - make sync_schema_props_perms() delete the CWConstraint entity instead of the constrained_by relation. In 3.19, the latter doesn't automatically result in the former just because the relation is composite. Simplify the constraint migration to delete all removed constraints and recreate new ones even if they share the same type; that optimization made the code more complicated for (AFAICT) no significant reason.

# -*- shell-script -*-

_ec_commands()
{
    local commands
    commands="$("$ec" listcommands 2>/dev/null)" || commands=""
    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$commands' -- "$cur"))
}

_ec()
{
    local cur prev cmd cmd_index opts i
    local ec="$1"

    COMPREPLY=()
    cur="$2"
    prev="$3"

    # searching for the command
    # (first non-option argument that doesn't follow a global option that
    #  receives an argument)
    for ((i=1; $i<=$COMP_CWORD; i++)); do
	if [[ ${COMP_WORDS[i]} != -* ]]; then
	    cmd="${COMP_WORDS[i]}"
	    cmd_index=$i
	    break
	fi
    done

    if [[ "$cur" == -* ]]; then
        if [ -z "$cmd" ]; then
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '--help' -- "$cur"))
	else
	    options="$("$ec" listcommands "$cmd" 2>/dev/null)" || commands=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options' -- "$cur"))
	fi
	return
    fi

    if [ -z "$cmd" ] || [ $COMP_CWORD -eq $i ]; then
	_ec_commands
	return
    fi

    # try to generate completion candidates for whatever command the user typed
    if _ec_command_specific; then
	return
    fi
}

_ec_command_specific()
{
    if [ "$(type -t "_ec_cmd_$cmd")" = function ]; then
	"_ec_cmd_$cmd"
	return 0
    fi

    case "$cmd" in
	client)
	    if [ "$prev" == "-b" ] || [ "$prev" == "--batch" ]; then
		COMPREPLY=( $( compgen -o filenames -G "$cur*" ) )
		return
	    fi
	    options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
	    instances="$("$ec" listinstances 2>/dev/null)" || instances=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
	;;
	db-dump)
	    if [ "$prev" == "-o" ] || [ "$prev" == "--output" ]; then
		COMPREPLY=( $( compgen -o filenames -G "$cur*" ) )
		return
	    fi
	    options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
	    instances="$("$ec" listinstances 2>/dev/null)" || instances=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
	;;
	# commands with template as argument
 	i18ncube)
	    cubes="$("$ec" listcubes 2>/dev/null)" || cubes=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $cubes' -- "$cur"))
 	;;
	# generic commands with instance as argument
 	start|stop|reload|restart|upgrade|start-repository|db-create|db-init|db-check|db-grant-user)
	    options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
	    instances="$("$ec" listinstances 2>/dev/null)" || instances=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
 	;;
	# generic commands without argument
 	list|newtemplate|i18ncubicweb|live-server)
	    options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
 	;;
	# generic commands without option
 	shell|i18ninstance|delete|status|schema-sync)
	    instances="$("$ec" listinstances 2>/dev/null)" || instances=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
 	;;
	# XXX should do better
 	create)
	    options="$("$ec" listcommands "$cmd" 2>/dev/null)" || options=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
 	;;
 	db-copy,db-restore,mboximport)
	    instances="$("$ec" listinstances 2>/dev/null)" || instances=""
	    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$options $instances' -- "$cur"))
 	;;
 	*)
 	    return 1
 	;;
    esac

    return 0
}

complete -o bashdefault -o default -F _ec cubicweb-ctl 2>/dev/null \
    || complete -o default -F _ec cubicweb-ctl