Commit b908feeb authored by Robby Russell's avatar Robby Russell
Browse files

Merge branch 'master' of github.com:robbyrussell/oh-my-zsh

parents e609fd5a d874c73f
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2009-2016 Robby Russell and contributors Copyright (c) 2009-2017 Robby Russell and contributors
See the full list at https://github.com/robbyrussell/oh-my-zsh/contributors See the full list at https://github.com/robbyrussell/oh-my-zsh/contributors
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
......
...@@ -5,7 +5,7 @@ WORDCHARS='' ...@@ -5,7 +5,7 @@ WORDCHARS=''
unsetopt menu_complete # do not autoselect the first completion entry unsetopt menu_complete # do not autoselect the first completion entry
unsetopt flowcontrol unsetopt flowcontrol
setopt auto_menu # show completion menu on succesive tab press setopt auto_menu # show completion menu on successive tab press
setopt complete_in_word setopt complete_in_word
setopt always_to_end setopt always_to_end
......
...@@ -86,7 +86,7 @@ function default() { ...@@ -86,7 +86,7 @@ function default() {
} }
# #
# Set enviroment variable "$1" to default value "$2" if "$1" is not yet defined. # Set environment variable "$1" to default value "$2" if "$1" is not yet defined.
# #
# Arguments: # Arguments:
# 1. name - The env variable to set # 1. name - The env variable to set
......
...@@ -73,6 +73,8 @@ ...@@ -73,6 +73,8 @@
| pacupd | sudo pacman -Sy | Update and refresh the local package database | | pacupd | sudo pacman -Sy | Update and refresh the local package database |
| pacupg | sudo pacman -Syu | Sync with repositories before upgrading packages | | pacupg | sudo pacman -Syu | Sync with repositories before upgrading packages |
| upgrade | sudo pacman -Syu | Sync with repositories before upgrading packages | | upgrade | sudo pacman -Syu | Sync with repositories before upgrading packages |
| pacfileupg | sudo pacman -Fy | Download fresh package databases from the server |
| pacfiles | pacman -Fs | Search package file names for matching strings. |
| Function | Description | | Function | Description |
|----------------|------------------------------------------------------| |----------------|------------------------------------------------------|
......
...@@ -82,6 +82,8 @@ alias pacinsd='sudo pacman -S --asdeps' ...@@ -82,6 +82,8 @@ alias pacinsd='sudo pacman -S --asdeps'
alias pacmir='sudo pacman -Syy' alias pacmir='sudo pacman -Syy'
alias paclsorphans='sudo pacman -Qdt' alias paclsorphans='sudo pacman -Qdt'
alias pacrmorphans='sudo pacman -Rs $(pacman -Qtdq)' alias pacrmorphans='sudo pacman -Rs $(pacman -Qtdq)'
alias pacfileupg='sudo pacman -Fy'
alias pacfiles='pacman tFs'
if (( $+commands[abs] && $+commands[aur] )); then if (( $+commands[abs] && $+commands[aur] )); then
......
# Activates autoenv or reports its failure # Activates autoenv or reports its failure
() { () {
if ! type autoenv_init >/dev/null; then if ! type autoenv_init >/dev/null; then
for d (~/.autoenv /usr/local/opt/autoenv /usr/local/bin); do for d (~/.autoenv ~/.local/bin /usr/local/opt/autoenv /usr/local/bin); do
if [[ -e $d/activate.sh ]]; then if [[ -e $d/activate.sh ]]; then
autoenv_dir=$d autoenv_dir=$d
break break
......
...@@ -100,7 +100,7 @@ elif [[ "$OSTYPE" = linux* ]] ; then ...@@ -100,7 +100,7 @@ elif [[ "$OSTYPE" = linux* ]] ; then
else else
color='red' color='red'
fi fi
echo "%{$fg[$color]%}[$(battery_pct_remaining)%%]%{$reset_color%}" echo "%{$fg[$color]%}$(battery_pct_remaining)%%%{$reset_color%}"
else else
echo "∞" echo "∞"
fi fi
......
# cask plugin # Cask plugin
Loads `cask` completion from non-standard locations, such as if installed [Cask](https://github.com/cask/cask) is a project management tool for Emacs that helps
automate the package development cycle; development, dependencies, testing, building,
packaging and more.
This plugin loads `cask` completion from non-standard locations, such as if installed
via Homebrew or others. To enable it, add `cask` to your plugins array: via Homebrew or others. To enable it, add `cask` to your plugins array:
```zsh ```zsh
plugins=(... cask) plugins=(... cask)
``` ```
Make sure you have the `cask` directory in your `$PATH` before loading Make sure you have the `cask` directory in your `$PATH` before loading Oh My Zsh,
Oh My Zsh, otherwise you'll get the "command not found" error. otherwise you'll get a "command not found" error.
...@@ -39,14 +39,17 @@ alias c='composer' ...@@ -39,14 +39,17 @@ alias c='composer'
alias csu='composer self-update' alias csu='composer self-update'
alias cu='composer update' alias cu='composer update'
alias cr='composer require' alias cr='composer require'
alias crm='composer remove'
alias ci='composer install' alias ci='composer install'
alias ccp='composer create-project' alias ccp='composer create-project'
alias cdu='composer dump-autoload' alias cdu='composer dump-autoload'
alias cdo='composer dump-autoload --optimize-autoloader'
alias cgu='composer global update' alias cgu='composer global update'
alias cgr='composer global require' alias cgr='composer global require'
alias cgrm='composer global remove'
# install composer in the current directory # install composer in the current directory
alias cget='curl -s https://getcomposer.org/installer | php' alias cget='curl -s https://getcomposer.org/installer | php'
# Add Composer's global binaries to PATH # Add Composer's global binaries to PATH
export PATH=$PATH:~/.composer/vendor/bin export PATH=$PATH:$(composer global config bin-dir --absolute) 2>/dev/null
...@@ -113,27 +113,27 @@ __docker_get_containers() { ...@@ -113,27 +113,27 @@ __docker_get_containers() {
return ret return ret
} }
__docker_stoppedcontainers() { __docker_complete_stopped_containers() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
__docker_get_containers stopped all "$@" __docker_get_containers stopped all "$@"
} }
__docker_runningcontainers() { __docker_complete_running_containers() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
__docker_get_containers running all "$@" __docker_get_containers running all "$@"
} }
__docker_containers() { __docker_complete_containers() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
__docker_get_containers all all "$@" __docker_get_containers all all "$@"
} }
__docker_containers_ids() { __docker_complete_containers_ids() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
__docker_get_containers all ids "$@" __docker_get_containers all ids "$@"
} }
__docker_containers_names() { __docker_complete_containers_names() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
__docker_get_containers all names "$@" __docker_get_containers all names "$@"
} }
...@@ -149,25 +149,27 @@ __docker_complete_info_plugins() { ...@@ -149,25 +149,27 @@ __docker_complete_info_plugins() {
return ret return ret
} }
__docker_images() { __docker_complete_images() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
integer ret=1 integer ret=1
declare -a images declare -a images
images=(${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}[2,-1]}/(#b)([^ ]##) ##([^ ]##) ##([^ ]##)*/${match[3]}:${(r:15:: :::)match[2]} in ${match[1]}}) images=(${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}[2,-1]}/(#b)([^ ]##) ##([^ ]##) ##([^ ]##)*/${match[3]}:${(r:15:: :::)match[2]} in ${match[1]}})
_describe -t docker-images "images" images && ret=0 _describe -t docker-images "images" images && ret=0
__docker_repositories_with_tags && ret=0 __docker_complete_repositories_with_tags && ret=0
return ret return ret
} }
__docker_repositories() { __docker_complete_repositories() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
integer ret=1
declare -a repos declare -a repos
repos=(${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}%% *}[2,-1]}) repos=(${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}%% *}[2,-1]})
repos=(${repos#<none>}) repos=(${repos#<none>})
_describe -t docker-repos "repositories" repos _describe -t docker-repos "repositories" repos && ret=0
return ret
} }
__docker_repositories_with_tags() { __docker_complete_repositories_with_tags() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
integer ret=1 integer ret=1
declare -a repos onlyrepos matched declare -a repos onlyrepos matched
...@@ -244,7 +246,7 @@ __docker_get_log_options() { ...@@ -244,7 +246,7 @@ __docker_get_log_options() {
return ret return ret
} }
__docker_log_drivers() { __docker_complete_log_drivers() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
integer ret=1 integer ret=1
drivers=(awslogs etwlogs fluentd gcplogs gelf journald json-file none splunk syslog) drivers=(awslogs etwlogs fluentd gcplogs gelf journald json-file none splunk syslog)
...@@ -252,7 +254,7 @@ __docker_log_drivers() { ...@@ -252,7 +254,7 @@ __docker_log_drivers() {
return ret return ret
} }
__docker_log_options() { __docker_complete_log_options() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
integer ret=1 integer ret=1
...@@ -295,7 +297,7 @@ __docker_complete_pid() { ...@@ -295,7 +297,7 @@ __docker_complete_pid() {
if compset -P '*:'; then if compset -P '*:'; then
case "${${words[-1]%:*}#*=}" in case "${${words[-1]%:*}#*=}" in
(container) (container)
__docker_runningcontainers && ret=0 __docker_complete_running_containers && ret=0
;; ;;
*) *)
_message 'value' && ret=0 _message 'value' && ret=0
...@@ -327,36 +329,40 @@ __docker_complete_ps_filters() { ...@@ -327,36 +329,40 @@ __docker_complete_ps_filters() {
if compset -P '*='; then if compset -P '*='; then
case "${${words[-1]%=*}#*=}" in case "${${words[-1]%=*}#*=}" in
(ancestor) (ancestor)
__docker_images && ret=0 __docker_complete_images && ret=0
;; ;;
(before|since) (before|since)
__docker_containers && ret=0 __docker_complete_containers && ret=0
;;
(health)
health_opts=('healthy' 'none' 'starting' 'unhealthy')
_describe -t health-filter-opts "health filter options" health_opts && ret=0
;; ;;
(id) (id)
__docker_containers_ids && ret=0 __docker_complete_containers_ids && ret=0
;; ;;
(is-task) (is-task)
_describe -t boolean-filter-opts "filter options" boolean_opts && ret=0 _describe -t boolean-filter-opts "filter options" boolean_opts && ret=0
;; ;;
(name) (name)
__docker_containers_names && ret=0 __docker_complete_containers_names && ret=0
;; ;;
(network) (network)
__docker_networks && ret=0 __docker_complete_networks && ret=0
;; ;;
(status) (status)
status_opts=('created' 'dead' 'exited' 'paused' 'restarting' 'running' 'removing') status_opts=('created' 'dead' 'exited' 'paused' 'restarting' 'running' 'removing')
_describe -t status-filter-opts "Status Filter Options" status_opts && ret=0 _describe -t status-filter-opts "status filter options" status_opts && ret=0
;; ;;
(volume) (volume)
__docker_volumes && ret=0 __docker_complete_volumes && ret=0
;; ;;
*) *)
_message 'value' && ret=0 _message 'value' && ret=0
;; ;;
esac esac
else else
opts=('ancestor' 'before' 'exited' 'id' 'label' 'name' 'network' 'since' 'status' 'volume') opts=('ancestor' 'before' 'exited' 'health' 'id' 'label' 'name' 'network' 'since' 'status' 'volume')
_describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0
fi fi
...@@ -393,12 +399,12 @@ __docker_complete_images_filters() { ...@@ -393,12 +399,12 @@ __docker_complete_images_filters() {
declare -a boolean_opts opts declare -a boolean_opts opts
boolean_opts=('true' 'false') boolean_opts=('true' 'false')
opts=('before' 'dangling' 'label' 'since') opts=('before' 'dangling' 'label' 'reference' 'since')
if compset -P '*='; then if compset -P '*='; then
case "${${words[-1]%=*}#*=}" in case "${${words[-1]%=*}#*=}" in
(before|since) (before|reference|since)
__docker_images && ret=0 __docker_complete_images && ret=0
;; ;;
(dangling) (dangling)
_describe -t boolean-filter-opts "filter options" boolean_opts && ret=0 _describe -t boolean-filter-opts "filter options" boolean_opts && ret=0
...@@ -424,7 +430,7 @@ __docker_complete_events_filter() { ...@@ -424,7 +430,7 @@ __docker_complete_events_filter() {
if compset -P '*='; then if compset -P '*='; then
case "${${words[-1]%=*}#*=}" in case "${${words[-1]%=*}#*=}" in
(container) (container)
__docker_containers && ret=0 __docker_complete_containers && ret=0
;; ;;
(daemon) (daemon)
emulate -L zsh emulate -L zsh
...@@ -444,10 +450,10 @@ __docker_complete_events_filter() { ...@@ -444,10 +450,10 @@ __docker_complete_events_filter() {
_describe -t event-filter-opts "event filter options" event_opts && ret=0 _describe -t event-filter-opts "event filter options" event_opts && ret=0
;; ;;
(image) (image)
__docker_images && ret=0 __docker_complete_images && ret=0
;; ;;
(network) (network)
__docker_networks && ret=0 __docker_complete_networks && ret=0
;; ;;
(type) (type)
local -a type_opts local -a type_opts
...@@ -455,7 +461,7 @@ __docker_complete_events_filter() { ...@@ -455,7 +461,7 @@ __docker_complete_events_filter() {
_describe -t type-filter-opts "type filter options" type_opts && ret=0 _describe -t type-filter-opts "type filter options" type_opts && ret=0
;; ;;
(volume) (volume)
__docker_volumes && ret=0 __docker_complete_volumes && ret=0
;; ;;
*) *)
_message 'value' && ret=0 _message 'value' && ret=0
...@@ -468,174 +474,725 @@ __docker_complete_events_filter() { ...@@ -468,174 +474,725 @@ __docker_complete_events_filter() {
return ret return ret
} }
# BO network # BO container
__docker_network_complete_ls_filters() { __docker_container_commands() {
[[ $PREFIX = -* ]] && return 1 local -a _docker_container_subcommands
integer ret=1 _docker_container_subcommands=(
"attach:Attach to a running container"
if compset -P '*='; then "commit:Create a new image from a container's changes"
case "${${words[-1]%=*}#*=}" in "cp:Copy files/folders between a container and the local filesystem"
(driver) "create:Create a new container"
__docker_complete_info_plugins Network && ret=0 "diff:Inspect changes on a container's filesystem"
;; "exec:Run a command in a running container"
(id) "export:Export a container's filesystem as a tar archive"
__docker_networks_ids && ret=0 "inspect:Display detailed information on one or more containers"
;; "kill:Kill one or more running containers"
(name) "logs:Fetch the logs of a container"
__docker_networks_names && ret=0 "ls:List containers"
;; "pause:Pause all processes within one or more containers"
(type) "port:List port mappings or a specific mapping for the container"
type_opts=('builtin' 'custom') "prune:Remove all stopped containers"
_describe -t type-filter-opts "Type Filter Options" type_opts && ret=0 "rename:Rename a container"
;; "restart:Restart one or more containers"
*) "rm:Remove one or more containers"
_message 'value' && ret=0 "run:Run a command in a new container"
;; "start:Start one or more stopped containers"
esac "stats:Display a live stream of container(s) resource usage statistics"
else "stop:Stop one or more running containers"
opts=('driver' 'id' 'label' 'name' 'type') "top:Display the running processes of a container"
_describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 "unpause:Unpause all processes within one or more containers"
fi "update:Update configuration of one or more containers"
"wait:Block until one or more containers stop, then print their exit codes"
return ret
}
__docker_get_networks() {
[[ $PREFIX = -* ]] && return 1
integer ret=1
local line s
declare -a lines networks
type=$1; shift
lines=(${(f)${:-"$(_call_program commands docker $docker_options network ls)"$'\n'}})
# Parse header line to find columns
local i=1 j=1 k header=${lines[1]}
declare -A begin end
while (( j < ${#header} - 1 )); do
i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 ))
k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
begin[${header[$i,$((j-1))]}]=$i
end[${header[$i,$((j-1))]}]=$k
done
end[${header[$i,$((j-1))]}]=-1
lines=(${lines[2,-1]})
# Network ID
if [[ $type = (ids|all) ]]; then
for line in $lines; do
s="${line[${begin[NETWORK ID]},${end[NETWORK ID]}]%% ##}"
s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}"
networks=($networks $s)
done
fi
# Names
if [[ $type = (names|all) ]]; then
for line in $lines; do
s="${line[${begin[NAME]},${end[NAME]}]%% ##}"
s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}"
networks=($networks $s)
done
fi
_describe -t networks-list "networks" networks "$@" && ret=0
return ret
}
__docker_networks() {
[[ $PREFIX = -* ]] && return 1
__docker_get_networks all "$@"
}
__docker_networks_ids() {
[[ $PREFIX = -* ]] && return 1
__docker_get_networks ids "$@"
}
__docker_networks_names() {
[[ $PREFIX = -* ]] && return 1
__docker_get_networks names "$@"
}
__docker_network_commands() {
local -a _docker_network_subcommands
_docker_network_subcommands=(
"connect:Connect a container to a network"
"create:Creates a new network with a name specified by the user"
"disconnect:Disconnects a container from a network"
"inspect:Displays detailed information on a network"
"ls:Lists all the networks created by the user"
"rm:Deletes one or more networks"
) )
_describe -t docker-network-commands "docker network command" _docker_network_subcommands _describe -t docker-container-commands "docker container command" _docker_container_subcommands
} }
__docker_network_subcommand() { __docker_container_subcommand() {
local -a _command_args opts_help local -a _command_args opts_help opts_attach_exec_run_start opts_create_run opts_create_run_update
local expl help="--help" local expl help="--help"
integer ret=1 integer ret=1
opts_attach_exec_run_start=(
"($help)--detach-keys=[Escape key sequence used to detach a container]:sequence:__docker_complete_detach_keys"
)
opts_create_run=(
"($help -a --attach)"{-a=,--attach=}"[Attach to stdin, stdout or stderr]:device:(STDIN STDOUT STDERR)"
"($help)*--add-host=[Add a custom host-to-IP mapping]:host\:ip mapping: "
"($help)*--blkio-weight-device=[Block IO (relative device weight)]:device:Block IO weight: "
"($help)*--cap-add=[Add Linux capabilities]:capability: "
"($help)*--cap-drop=[Drop Linux capabilities]:capability: "
"($help)--cgroup-parent=[Parent cgroup for the container]:cgroup: "
"($help)--cidfile=[Write the container ID to the file]:CID file:_files"
"($help)--cpus=[Number of CPUs (default 0.000)]:cpus: "
"($help)*--device=[Add a host device to the container]:device:_files"
"($help)*--device-read-bps=[Limit the read rate (bytes per second) from a device]:device:IO rate: "
"($help)*--device-read-iops=[Limit the read rate (IO per second) from a device]:device:IO rate: "
"($help)*--device-write-bps=[Limit the write rate (bytes per second) to a device]:device:IO rate: "
"($help)*--device-write-iops=[Limit the write rate (IO per second) to a device]:device:IO rate: "
"($help)--disable-content-trust[Skip image verification]"
"($help)*--dns=[Custom DNS servers]:DNS server: "
"($help)*--dns-option=[Custom DNS options]:DNS option: "
"($help)*--dns-search=[Custom DNS search domains]:DNS domains: "
"($help)*"{-e=,--env=}"[Environment variables]:environment variable: "
"($help)--entrypoint=[Overwrite the default entrypoint of the image]:entry point: "
"($help)*--env-file=[Read environment variables from a file]:environment file:_files"
"($help)*--expose=[Expose a port from the container without publishing it]: "
"($help)*--group=[Set one or more supplementary user groups for the container]:group:_groups"
"($help -h --hostname)"{-h=,--hostname=}"[Container host name]:hostname:_hosts"
"($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]"
"($help)--ip=[Container IPv4 address]:IPv4: "
"($help)--ip6=[Container IPv6 address]:IPv6: "
"($help)--ipc=[IPC namespace to use]:IPC namespace: "
"($help)--isolation=[Container isolation technology]:isolation:(default hyperv process)"
"($help)*--link=[Add link to another container]:link:->link"
"($help)*--link-local-ip=[Add a link-local address for the container]:IPv4/IPv6: "
"($help)*"{-l=,--label=}"[Container metadata]:label: "
"($help)--log-driver=[Default driver for container logs]:logging driver:__docker_complete_log_drivers"
"($help)*--log-opt=[Log driver specific options]:log driver options:__docker_complete_log_options"
"($help)--mac-address=[Container MAC address]:MAC address: "
"($help)--name=[Container name]:name: "
"($help)--network=[Connect a container to a network]:network mode:(bridge none container host)"
"($help)*--network-alias=[Add network-scoped alias for the container]:alias: "
"($help)--oom-kill-disable[Disable OOM Killer]"
"($help)--oom-score-adj[Tune the host's OOM preferences for containers (accepts -1000 to 1000)]"
"($help)--pids-limit[Tune container pids limit (set -1 for unlimited)]"
"($help -P --publish-all)"{-P,--publish-all}"[Publish all exposed ports]"
"($help)*"{-p=,--publish=}"[Expose a container's port to the host]:port:_ports"
"($help)--pid=[PID namespace to use]:PID namespace:__docker_complete_pid"
"($help)--privileged[Give extended privileges to this container]"
"($help)--read-only[Mount the container's root filesystem as read only]"
"($help)*--security-opt=[Security options]:security option: "
"($help)*--shm-size=[Size of '/dev/shm' (format is '<number><unit>')]:shm size: "
"($help)--stop-timeout=[Timeout (in seconds) to stop a container]:time: "
"($help)*--sysctl=-[sysctl options]:sysctl: "
"($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]"
"($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users"
"($help)*--ulimit=[ulimit options]:ulimit: "
"($help)--userns=[Container user namespace]:user namespace:(host)"
"($help)--tmpfs[mount tmpfs]"
"($help)*-v[Bind mount a volume]:volume: "
"($help)--volume-driver=[Optional volume driver for the container]:volume driver:(local)"
"($help)*--volumes-from=[Mount volumes from the specified container]:volume: "
"($help -w --workdir)"{-w=,--workdir=}"[Working directory inside the container]:directory:_directories"
)
opts_create_run_update=(
"($help)--blkio-weight=[Block IO (relative weight), between 10 and 1000]:Block IO weight:(10 100 500 1000)"
"($help -c --cpu-shares)"{-c=,--cpu-shares=}"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)"
"($help)--cpu-period=[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: "
"($help)--cpu-quota=[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: "
"($help)--cpu-rt-period=[Limit the CPU real-time period]:CPU real-time period in microseconds: "
"($help)--cpu-rt-runtime=[Limit the CPU real-time runtime]:CPU real-time runtime in microseconds: "
"($help)--cpuset-cpus=[CPUs in which to allow execution]:CPUs: "
"($help)--cpuset-mems=[MEMs in which to allow execution]:MEMs: "
"($help)--kernel-memory=[Kernel memory limit in bytes]:Memory limit: "
"($help -m --memory)"{-m=,--memory=}"[Memory limit]:Memory limit: "
"($help)--memory-reservation=[Memory soft limit]:Memory limit: "
"($help)--memory-swap=[Total memory limit with swap]:Memory limit: "
"($help)--restart=[Restart policy]:restart policy:(no on-failure always unless-stopped)"
)
opts_help=("(: -)--help[Print usage]") opts_help=("(: -)--help[Print usage]")
case "$words[1]" in case "$words[1]" in
(connect) (attach)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help)*--alias=[Add network-scoped alias for the container]:alias: " \ $opts_attach_exec_run_start \
"($help)--ip=[Container IPv4 address]:IPv4: " \ "($help)--no-stdin[Do not attach stdin]" \
"($help)--ip6=[Container IPv6 address]:IPv6: " \ "($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \
"($help)*--link=[Add a link to another container]:link:->link" \ "($help -):containers:__docker_complete_running_containers" && ret=0
"($help)*--link-local-ip=[Add a link-local address for the container]:IPv4/IPv6: " \ ;;
"($help -)1:network:__docker_networks" \ (commit)
"($help -)2:containers:__docker_containers" && ret=0 _arguments $(__docker_arguments) \
$opts_help \
"($help -a --author)"{-a=,--author=}"[Author]:author: " \
"($help)*"{-c=,--change=}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \
"($help -m --message)"{-m=,--message=}"[Commit message]:message: " \
"($help -p --pause)"{-p,--pause}"[Pause container during commit]" \
"($help -):container:__docker_complete_containers" \
"($help -): :__docker_complete_repositories_with_tags" && ret=0
;;
(cp)
local state
_arguments $(__docker_arguments) \
$opts_help \
"($help -L --follow-link)"{-L,--follow-link}"[Always follow symbol link]" \
"($help -)1:container:->container" \
"($help -)2:hostpath:_files" && ret=0
case $state in case $state in
(link) (container)
if compset -P "*:"; then if compset -P "*:"; then
_wanted alias expl "Alias" compadd -E "" && ret=0 _files && ret=0
else else
__docker_runningcontainers -qS ":" && ret=0 __docker_complete_containers -qS ":" && ret=0
fi fi
;; ;;
esac esac
;; ;;
(create) (create)
_arguments $(__docker_arguments) -A '-*' \ local state
_arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help)*--aux-address[Auxiliary IPv4 or IPv6 addresses used by network driver]:key=IP: " \ $opts_create_run \
"($help -d --driver)"{-d=,--driver=}"[Driver to manage the Network]:driver:(null host bridge overlay)" \ $opts_create_run_update \
"($help)*--gateway=[IPv4 or IPv6 Gateway for the master subnet]:IP: " \ "($help -): :__docker_complete_images" \
"($help)--internal[Restricts external access to the network]" \ "($help -):command: _command_names -e" \
"($help)*--ip-range=[Allocate container ip from a sub-range]:IP/mask: " \ "($help -)*::arguments: _normal" && ret=0
"($help)--ipam-driver=[IP Address Management Driver]:driver:(default)" \ case $state in
"($help)*--ipam-opt=[Custom IPAM plugin options]:opt=value: " \ (link)
"($help)--ipv6[Enable IPv6 networking]" \ if compset -P "*:"; then
"($help)*--label=[Set metadata on a network]:label=value: " \ _wanted alias expl "Alias" compadd -E "" && ret=0
"($help)*"{-o=,--opt=}"[Driver specific options]:opt=value: " \ else
"($help)*--subnet=[Subnet in CIDR format that represents a network segment]:IP/mask: " \ __docker_complete_running_containers -qS ":" && ret=0
"($help -)1:Network Name: " && ret=0 fi
;;
esac
;; ;;
(disconnect) (diff)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -)1:network:__docker_networks" \ "($help -)*:containers:__docker_complete_containers" && ret=0
"($help -)2:containers:__docker_containers" && ret=0
;; ;;
(inspect) (exec)
local state
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ $opts_attach_exec_run_start \
"($help -)*:network:__docker_networks" && ret=0 "($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \
"($help)*"{-e=,--env=}"[Set environment variables]:environment variable: " \
"($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]" \
"($help)--privileged[Give extended Linux capabilities to the command]" \
"($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]" \
"($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" \
"($help -):containers:__docker_complete_running_containers" \
"($help -)*::command:->anycommand" && ret=0
case $state in
(anycommand)
shift 1 words
(( CURRENT-- ))
_normal && ret=0
;;
esac
;; ;;
(ls) (export)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help)--no-trunc[Do not truncate the output]" \ "($help -o --output)"{-o=,--output=}"[Write to a file, instead of stdout]:output file:_files" \
"($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \ "($help -)*:containers:__docker_complete_containers" && ret=0
;;
(inspect)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \
"($help -s --size)"{-s,--size}"[Display total file sizes]" \
"($help -)*:containers:__docker_complete_containers" && ret=0
;;
(kill)
_arguments $(__docker_arguments) \
$opts_help \
"($help -s --signal)"{-s=,--signal=}"[Signal to send]:signal:_signals" \
"($help -)*:containers:__docker_complete_running_containers" && ret=0
;;
(logs)
_arguments $(__docker_arguments) \
$opts_help \
"($help)--details[Show extra details provided to logs]" \
"($help -f --follow)"{-f,--follow}"[Follow log output]" \
"($help -s --since)"{-s=,--since=}"[Show logs since this timestamp]:timestamp: " \
"($help -t --timestamps)"{-t,--timestamps}"[Show timestamps]" \
"($help)--tail=[Output the last K lines]:lines:(1 10 20 50 all)" \
"($help -)*:containers:__docker_complete_containers" && ret=0
;;
(ls|list)
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --all)"{-a,--all}"[Show all containers]" \
"($help)--before=[Show only container created before...]:containers:__docker_complete_containers" \
"($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_ps_filters" \
"($help)--format=[Pretty-print containers using a Go template]:template: " \
"($help -l --latest)"{-l,--latest}"[Show only the latest created container]" \
"($help -n --last)"{-n=,--last=}"[Show n last created containers (includes all states)]:n:(1 5 10 25 50)" \
"($help)--no-trunc[Do not truncate output]" \
"($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
"($help -s --size)"{-s,--size}"[Display total file sizes]" \
"($help)--since=[Show only containers created since...]:containers:__docker_complete_containers" && ret=0
;;
(pause|unpause)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)*:containers:__docker_complete_running_containers" && ret=0
;;
(port)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)1:containers:__docker_complete_running_containers" \
"($help -)2:port:_ports" && ret=0
;;
(prune)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0
;;
(rename)
_arguments $(__docker_arguments) \
$opts_help \
"($help -):old name:__docker_complete_containers" \
"($help -):new name: " && ret=0
;;
(restart)
_arguments $(__docker_arguments) \
$opts_help \
"($help -t --time)"{-t=,--time=}"[Number of seconds to try to stop for before killing the container]:seconds to before killing:(1 5 10 30 60)" \
"($help -)*:containers:__docker_complete_containers_ids" && ret=0
;;
(rm)
local state
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --force)"{-f,--force}"[Force removal]" \
"($help -l --link)"{-l,--link}"[Remove the specified link and not the underlying container]" \
"($help -v --volumes)"{-v,--volumes}"[Remove the volumes associated to the container]" \
"($help -)*:containers:->values" && ret=0
case $state in
(values)
if [[ ${words[(r)-f]} == -f || ${words[(r)--force]} == --force ]]; then
__docker_complete_containers && ret=0
else
__docker_complete_stopped_containers && ret=0
fi
;;
esac
;;
(run)
local state
_arguments $(__docker_arguments) \
$opts_help \
$opts_create_run \
$opts_create_run_update \
$opts_attach_exec_run_start \
"($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \
"($help)--health-cmd=[Command to run to check health]:command: " \
"($help)--health-interval=[Time between running the check]:time: " \
"($help)--health-retries=[Consecutive failures needed to report unhealthy]:retries:(1 2 3 4 5)" \
"($help)--health-timeout=[Maximum time to allow one check to run]:time: " \
"($help)--no-healthcheck[Disable any container-specified HEALTHCHECK]" \
"($help)--rm[Remove intermediate containers when it exits]" \
"($help)--runtime=[Name of the runtime to be used for that container]:runtime:__docker_complete_runtimes" \
"($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \
"($help)--stop-signal=[Signal to kill a container]:signal:_signals" \
"($help)--storage-opt=[Storage driver options for the container]:storage options:->storage-opt" \
"($help -): :__docker_complete_images" \
"($help -):command: _command_names -e" \
"($help -)*::arguments: _normal" && ret=0
case $state in
(link)
if compset -P "*:"; then
_wanted alias expl "Alias" compadd -E "" && ret=0
else
__docker_complete_running_containers -qS ":" && ret=0
fi
;;
(storage-opt)
if compset -P "*="; then
_message "value" && ret=0
else
opts=('size')
_describe -t filter-opts "storage options" opts -qS "=" && ret=0
fi
;;
esac
;;
(start)
_arguments $(__docker_arguments) \
$opts_help \
$opts_attach_exec_run_start \
"($help -a --attach)"{-a,--attach}"[Attach container's stdout/stderr and forward all signals]" \
"($help -i --interactive)"{-i,--interactive}"[Attach container's stding]" \
"($help -)*:containers:__docker_complete_stopped_containers" && ret=0
;;
(stats)
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --all)"{-a,--all}"[Show all containers (default shows just running)]" \
"($help)--format=[Pretty-print images using a Go template]:template: " \
"($help)--no-stream[Disable streaming stats and only pull the first result]" \
"($help -)*:containers:__docker_complete_running_containers" && ret=0
;;
(stop)
_arguments $(__docker_arguments) \
$opts_help \
"($help -t --time)"{-t=,--time=}"[Number of seconds to try to stop for before killing the container]:seconds to before killing:(1 5 10 30 60)" \
"($help -)*:containers:__docker_complete_running_containers" && ret=0
;;
(top)
local state
_arguments $(__docker_arguments) \
$opts_help \
"($help -)1:containers:__docker_complete_running_containers" \
"($help -)*:: :->ps-arguments" && ret=0
case $state in
(ps-arguments)
_ps && ret=0
;;
esac
;;
(update)
local state
_arguments $(__docker_arguments) \
$opts_help \
opts_create_run_update \
"($help -)*: :->values" && ret=0
case $state in
(values)
if [[ ${words[(r)--kernel-memory*]} = (--kernel-memory*) ]]; then
__docker_complete_stopped_containers && ret=0
else
__docker_complete_containers && ret=0
fi
;;
esac
;;
(wait)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)*:containers:__docker_complete_running_containers" && ret=0
;;
(help)
_arguments $(__docker_arguments) ":subcommand:__docker_container_commands" && ret=0
;;
esac
return ret
}
# EO container
# BO image
__docker_image_commands() {
local -a _docker_image_subcommands
_docker_image_subcommands=(
"build:Build an image from a Dockerfile"
"history:Show the history of an image"
"import:Import the contents from a tarball to create a filesystem image"
"inspect:Display detailed information on one or more images"
"load:Load an image from a tar archive or STDIN"
"ls:List images"
"prune:Remove unused images"
"pull:Pull an image or a repository from a registry"
"push:Push an image or a repository to a registry"
"rm:Remove one or more images"
"save:Save one or more images to a tar archive (streamed to STDOUT by default)"
"tag:Tag an image into a repository"
)
_describe -t docker-image-commands "docker image command" _docker_image_subcommands
}
__docker_image_subcommand() {
local -a _command_args opts_help
local expl help="--help"
integer ret=1
opts_help=("(: -)--help[Print usage]")
case "$words[1]" in
(build)
_arguments $(__docker_arguments) \
$opts_help \
"($help)*--build-arg=[Build-time variables]:<varname>=<value>: " \
"($help)*--cache-from=[Images to consider as cache sources]: :__docker_complete_repositories_with_tags" \
"($help -c --cpu-shares)"{-c=,--cpu-shares=}"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)" \
"($help)--cgroup-parent=[Parent cgroup for the container]:cgroup: " \
"($help)--compress[Compress the build context using gzip]" \
"($help)--cpu-period=[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: " \
"($help)--cpu-quota=[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: " \
"($help)--cpu-rt-period=[Limit the CPU real-time period]:CPU real-time period in microseconds: " \
"($help)--cpu-rt-runtime=[Limit the CPU real-time runtime]:CPU real-time runtime in microseconds: " \
"($help)--cpuset-cpus=[CPUs in which to allow execution]:CPUs: " \
"($help)--cpuset-mems=[MEMs in which to allow execution]:MEMs: " \
"($help)--disable-content-trust[Skip image verification]" \
"($help -f --file)"{-f=,--file=}"[Name of the Dockerfile]:Dockerfile:_files" \
"($help)--force-rm[Always remove intermediate containers]" \
"($help)--isolation=[Container isolation technology]:isolation:(default hyperv process)" \
"($help)*--label=[Set metadata for an image]:label=value: " \
"($help -m --memory)"{-m=,--memory=}"[Memory limit]:Memory limit: " \
"($help)--memory-swap=[Total memory limit with swap]:Memory limit: " \
"($help)--network=[Connect a container to a network]:network mode:(bridge none container host)" \
"($help)--no-cache[Do not use cache when building the image]" \
"($help)--pull[Attempt to pull a newer version of the image]" \
"($help -q --quiet)"{-q,--quiet}"[Suppress verbose build output]" \
"($help)--rm[Remove intermediate containers after a successful build]" \
"($help)*--shm-size=[Size of '/dev/shm' (format is '<number><unit>')]:shm size: " \
"($help -t --tag)*"{-t=,--tag=}"[Repository, name and tag for the image]: :__docker_complete_repositories_with_tags" \
"($help)*--ulimit=[ulimit options]:ulimit: " \
"($help)--userns=[Container user namespace]:user namespace:(host)" \
"($help -):path or URL:_directories" && ret=0
;;
(history)
_arguments $(__docker_arguments) \
$opts_help \
"($help -H --human)"{-H,--human}"[Print sizes and dates in human readable format]" \
"($help)--no-trunc[Do not truncate output]" \
"($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
"($help -)*: :__docker_complete_images" && ret=0
;;
(import)
_arguments $(__docker_arguments) \
$opts_help \
"($help)*"{-c=,--change=}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \
"($help -m --message)"{-m=,--message=}"[Commit message for imported image]:message: " \
"($help -):URL:(- http:// file://)" \
"($help -): :__docker_complete_repositories_with_tags" && ret=0
;;
(inspect)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \
"($help -)*:images:__docker_complete_images" && ret=0
;;
(load)
_arguments $(__docker_arguments) \
$opts_help \
"($help -i --input)"{-i=,--input=}"[Read from tar archive file]:archive file:_files -g \"*.((tar|TAR)(.gz|.GZ|.Z|.bz2|.lzma|.xz|)|(tbz|tgz|txz))(-.)\"" \
"($help -q --quiet)"{-q,--quiet}"[Suppress the load output]" && ret=0
;;
(ls|list)
local state
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --all)"{-a,--all}"[Show all images]" \
"($help)--digests[Show digests]" \
"($help)*"{-f=,--filter=}"[Filter values]:filter:->filter-options" \
"($help)--format=[Pretty-print images using a Go template]:template: " \
"($help)--no-trunc[Do not truncate output]" \
"($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
"($help -): :__docker_complete_repositories" && ret=0
case $state in
(filter-options)
__docker_complete_images_filters && ret=0
;;
esac
;;
(prune)
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --all)"{-a,--all}"[Remove all unused images, not just dangling ones]" \
"($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0
;;
(pull)
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --all-tags)"{-a,--all-tags}"[Download all tagged images]" \
"($help)--disable-content-trust[Skip image verification]" \
"($help -):name:__docker_search" && ret=0
;;
(push)
_arguments $(__docker_arguments) \
$opts_help \
"($help)--disable-content-trust[Skip image signing]" \
"($help -): :__docker_complete_images" && ret=0
;;
(rm)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --force)"{-f,--force}"[Force removal]" \
"($help)--no-prune[Do not delete untagged parents]" \
"($help -)*: :__docker_complete_images" && ret=0
;;
(save)
_arguments $(__docker_arguments) \
$opts_help \
"($help -o --output)"{-o=,--output=}"[Write to file]:file:_files" \
"($help -)*: :__docker_complete_images" && ret=0
;;
(tag)
_arguments $(__docker_arguments) \
$opts_help \
"($help -):source:__docker_complete_images"\
"($help -):destination:__docker_complete_repositories_with_tags" && ret=0
;;
(help)
_arguments $(__docker_arguments) ":subcommand:__docker_container_commands" && ret=0
;;
esac
return ret
}
# EO image
# BO network
__docker_network_complete_ls_filters() {
[[ $PREFIX = -* ]] && return 1
integer ret=1
if compset -P '*='; then
case "${${words[-1]%=*}#*=}" in
(driver)
__docker_complete_info_plugins Network && ret=0
;;
(id)
__docker_complete_networks_ids && ret=0
;;
(name)
__docker_complete_networks_names && ret=0
;;
(type)
type_opts=('builtin' 'custom')
_describe -t type-filter-opts "Type Filter Options" type_opts && ret=0
;;
*)
_message 'value' && ret=0
;;
esac
else
opts=('driver' 'id' 'label' 'name' 'type')
_describe -t filter-opts "Filter Options" opts -qS "=" && ret=0
fi
return ret
}
__docker_get_networks() {
[[ $PREFIX = -* ]] && return 1
integer ret=1
local line s
declare -a lines networks
type=$1; shift
lines=(${(f)${:-"$(_call_program commands docker $docker_options network ls)"$'\n'}})
# Parse header line to find columns
local i=1 j=1 k header=${lines[1]}
declare -A begin end
while (( j < ${#header} - 1 )); do
i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 ))
k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
begin[${header[$i,$((j-1))]}]=$i
end[${header[$i,$((j-1))]}]=$k
done
end[${header[$i,$((j-1))]}]=-1
lines=(${lines[2,-1]})
# Network ID
if [[ $type = (ids|all) ]]; then
for line in $lines; do
s="${line[${begin[NETWORK ID]},${end[NETWORK ID]}]%% ##}"
s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}"
s="$s, ${${line[${begin[SCOPE]},${end[SCOPE]}]}%% ##}"
networks=($networks $s)
done
fi
# Names
if [[ $type = (names|all) ]]; then
for line in $lines; do
s="${line[${begin[NAME]},${end[NAME]}]%% ##}"
s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}"
s="$s, ${${line[${begin[SCOPE]},${end[SCOPE]}]}%% ##}"
networks=($networks $s)
done
fi
_describe -t networks-list "networks" networks "$@" && ret=0
return ret
}
__docker_complete_networks() {
[[ $PREFIX = -* ]] && return 1
__docker_get_networks all "$@"
}
__docker_complete_networks_ids() {
[[ $PREFIX = -* ]] && return 1
__docker_get_networks ids "$@"
}
__docker_complete_networks_names() {
[[ $PREFIX = -* ]] && return 1
__docker_get_networks names "$@"
}
__docker_network_commands() {
local -a _docker_network_subcommands
_docker_network_subcommands=(
"connect:Connect a container to a network"
"create:Creates a new network with a name specified by the user"
"disconnect:Disconnects a container from a network"
"inspect:Displays detailed information on a network"
"ls:Lists all the networks created by the user"
"prune:Remove all unused networks"
"rm:Deletes one or more networks"
)
_describe -t docker-network-commands "docker network command" _docker_network_subcommands
}
__docker_network_subcommand() {
local -a _command_args opts_help
local expl help="--help"
integer ret=1
opts_help=("(: -)--help[Print usage]")
case "$words[1]" in
(connect)
_arguments $(__docker_arguments) \
$opts_help \
"($help)*--alias=[Add network-scoped alias for the container]:alias: " \
"($help)--ip=[Container IPv4 address]:IPv4: " \
"($help)--ip6=[Container IPv6 address]:IPv6: " \
"($help)*--link=[Add a link to another container]:link:->link" \
"($help)*--link-local-ip=[Add a link-local address for the container]:IPv4/IPv6: " \
"($help -)1:network:__docker_complete_networks" \
"($help -)2:containers:__docker_complete_containers" && ret=0
case $state in
(link)
if compset -P "*:"; then
_wanted alias expl "Alias" compadd -E "" && ret=0
else
__docker_complete_running_containers -qS ":" && ret=0
fi
;;
esac
;;
(create)
_arguments $(__docker_arguments) -A '-*' \
$opts_help \
"($help)--attachable[Enable manual container attachment]" \
"($help)*--aux-address[Auxiliary IPv4 or IPv6 addresses used by network driver]:key=IP: " \
"($help -d --driver)"{-d=,--driver=}"[Driver to manage the Network]:driver:(null host bridge overlay)" \
"($help)*--gateway=[IPv4 or IPv6 Gateway for the master subnet]:IP: " \
"($help)--internal[Restricts external access to the network]" \
"($help)*--ip-range=[Allocate container ip from a sub-range]:IP/mask: " \
"($help)--ipam-driver=[IP Address Management Driver]:driver:(default)" \
"($help)*--ipam-opt=[Custom IPAM plugin options]:opt=value: " \
"($help)--ipv6[Enable IPv6 networking]" \
"($help)*--label=[Set metadata on a network]:label=value: " \
"($help)*"{-o=,--opt=}"[Driver specific options]:opt=value: " \
"($help)*--subnet=[Subnet in CIDR format that represents a network segment]:IP/mask: " \
"($help -)1:Network Name: " && ret=0
;;
(disconnect)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)1:network:__docker_complete_networks" \
"($help -)2:containers:__docker_complete_containers" && ret=0
;;
(inspect)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \
"($help -)*:network:__docker_complete_networks" && ret=0
;;
(ls)
_arguments $(__docker_arguments) \
$opts_help \
"($help)--no-trunc[Do not truncate the output]" \
"($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \
"($help)--format=[Pretty-print networks using a Go template]:template: " \ "($help)--format=[Pretty-print networks using a Go template]:template: " \
"($help -q --quiet)"{-q,--quiet}"[Only display numeric IDs]" && ret=0 "($help -q --quiet)"{-q,--quiet}"[Only display numeric IDs]" && ret=0
case $state in case $state in
...@@ -644,10 +1201,15 @@ __docker_network_subcommand() { ...@@ -644,10 +1201,15 @@ __docker_network_subcommand() {
;; ;;
esac esac
;; ;;
(prune)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0
;;
(rm) (rm)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -)*:network:__docker_networks" && ret=0 "($help -)*:network:__docker_complete_networks" && ret=0
;; ;;
(help) (help)
_arguments $(__docker_arguments) ":subcommand:__docker_network_commands" && ret=0 _arguments $(__docker_arguments) ":subcommand:__docker_network_commands" && ret=0
...@@ -814,7 +1376,7 @@ __docker_node_subcommand() { ...@@ -814,7 +1376,7 @@ __docker_node_subcommand() {
(rm|remove) (rm|remove)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help)--force[Force remove an active node]" \ "($help -f --force)"{-f,--force}"[Force remove a node from the swarm]" \
"($help -)*:node:__docker_complete_pending_nodes" && ret=0 "($help -)*:node:__docker_complete_pending_nodes" && ret=0
;; ;;
(demote) (demote)
...@@ -956,6 +1518,107 @@ __docker_plugin_subcommand() { ...@@ -956,6 +1518,107 @@ __docker_plugin_subcommand() {
# EO plugin # EO plugin
# BO secret
__docker_secrets() {
[[ $PREFIX = -* ]] && return 1
integer ret=1
local line s
declare -a lines secrets
type=$1; shift
lines=(${(f)${:-"$(_call_program commands docker $docker_options secret ls)"$'\n'}})
# Parse header line to find columns
local i=1 j=1 k header=${lines[1]}
declare -A begin end
while (( j < ${#header} - 1 )); do
i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 ))
k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
begin[${header[$i,$((j-1))]}]=$i
end[${header[$i,$((j-1))]}]=$k
done
end[${header[$i,$((j-1))]}]=-1
lines=(${lines[2,-1]})
# ID
if [[ $type = (ids|all) ]]; then
for line in $lines; do
s="${line[${begin[ID]},${end[ID]}]%% ##}"
secrets=($secrets $s)
done
fi
# Names
if [[ $type = (names|all) ]]; then
for line in $lines; do
s="${line[${begin[NAME]},${end[NAME]}]%% ##}"
secrets=($secrets $s)
done
fi
_describe -t secrets-list "secrets" secrets "$@" && ret=0
return ret
}
__docker_complete_secrets() {
[[ $PREFIX = -* ]] && return 1
__docker_secrets all "$@"
}
__docker_secret_commands() {
local -a _docker_secret_subcommands
_docker_secret_subcommands=(
"create:Create a secret using stdin as content"
"inspect:Display detailed information on one or more secrets"
"ls:List secrets"
"rm:Remove one or more secrets"
)
_describe -t docker-secret-commands "docker secret command" _docker_secret_subcommands
}
__docker_secret_subcommand() {
local -a _command_args opts_help
local expl help="--help"
integer ret=1
opts_help=("(: -)--help[Print usage]")
case "$words[1]" in
(create)
_arguments $(__docker_arguments) \
$opts_help \
"($help)*"{-l=,--label=}"[Secret labels]:label: " \
"($help -):secret: " && ret=0
;;
(inspect)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given Go template]:template: " \
"($help -)*:secret:__docker_complete_secrets" && ret=0
;;
(ls|list)
_arguments $(__docker_arguments) \
$opts_help \
"($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0
;;
(rm|remove)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)*:secret:__docker_complete_secrets" && ret=0
;;
(help)
_arguments $(__docker_arguments) ":subcommand:__docker_secret_commands" && ret=0
;;
esac
return ret
}
# EO secret
# BO service # BO service
__docker_service_complete_ls_filters() { __docker_service_complete_ls_filters() {
...@@ -1071,7 +1734,7 @@ __docker_service_commands() { ...@@ -1071,7 +1734,7 @@ __docker_service_commands() {
"inspect:Display detailed information on one or more services" "inspect:Display detailed information on one or more services"
"ls:List services" "ls:List services"
"rm:Remove one or more services" "rm:Remove one or more services"
"scale:Scale one or multiple services" "scale:Scale one or multiple replicated services"
"ps:List the tasks of a service" "ps:List the tasks of a service"
"update:Update a service" "update:Update a service"
) )
...@@ -1088,15 +1751,19 @@ __docker_service_subcommand() { ...@@ -1088,15 +1751,19 @@ __docker_service_subcommand() {
"($help)*--constraint=[Placement constraints]:constraint: " "($help)*--constraint=[Placement constraints]:constraint: "
"($help)--endpoint-mode=[Placement constraints]:mode:(dnsrr vip)" "($help)--endpoint-mode=[Placement constraints]:mode:(dnsrr vip)"
"($help)*"{-e=,--env=}"[Set environment variables]:env: " "($help)*"{-e=,--env=}"[Set environment variables]:env: "
"($help)*--group-add=[Add additional user groups to the container]:group:_groups" "($help)--health-cmd=[Command to run to check health]:command: "
"($help)--health-interval=[Time between running the check]:time: "
"($help)--health-retries=[Consecutive failures needed to report unhealthy]:retries:(1 2 3 4 5)"
"($help)--health-timeout=[Maximum time to allow one check to run]:time: "
"($help)--hostname=[Service container hostname]:hostname: " \
"($help)*--label=[Service labels]:label: " "($help)*--label=[Service labels]:label: "
"($help)--limit-cpu=[Limit CPUs]:value: " "($help)--limit-cpu=[Limit CPUs]:value: "
"($help)--limit-memory=[Limit Memory]:value: " "($help)--limit-memory=[Limit Memory]:value: "
"($help)--log-driver=[Logging driver for service]:logging driver:__docker_log_drivers" "($help)--log-driver=[Logging driver for service]:logging driver:__docker_complete_log_drivers"
"($help)*--log-opt=[Logging driver options]:log driver options:__docker_log_options" "($help)*--log-opt=[Logging driver options]:log driver options:__docker_complete_log_options"
"($help)*--mount=[Attach a mount to the service]:mount: " "($help)*--mount=[Attach a filesystem mount to the service]:mount: "
"($help)--name=[Service name]:name: "
"($help)*--network=[Network attachments]:network: " "($help)*--network=[Network attachments]:network: "
"($help)--no-healthcheck[Disable any container-specified HEALTHCHECK]"
"($help)*"{-p=,--publish=}"[Publish a port as a node port]:port: " "($help)*"{-p=,--publish=}"[Publish a port as a node port]:port: "
"($help)--replicas=[Number of tasks]:replicas: " "($help)--replicas=[Number of tasks]:replicas: "
"($help)--reserve-cpu=[Reserve CPUs]:value: " "($help)--reserve-cpu=[Reserve CPUs]:value: "
...@@ -1105,7 +1772,9 @@ __docker_service_subcommand() { ...@@ -1105,7 +1772,9 @@ __docker_service_subcommand() {
"($help)--restart-delay=[Delay between restart attempts]:delay: " "($help)--restart-delay=[Delay between restart attempts]:delay: "
"($help)--restart-max-attempts=[Maximum number of restarts before giving up]:max-attempts: " "($help)--restart-max-attempts=[Maximum number of restarts before giving up]:max-attempts: "
"($help)--restart-window=[Window used to evaluate the restart policy]:window: " "($help)--restart-window=[Window used to evaluate the restart policy]:window: "
"($help)*--secret=[Specify secrets to expose to the service]:secret:__docker_complete_secrets"
"($help)--stop-grace-period=[Time to wait before force killing a container]:grace period: " "($help)--stop-grace-period=[Time to wait before force killing a container]:grace period: "
"($help -t --tty)"{-t,--tty}"[Allocate a pseudo-TTY]"
"($help)--update-delay=[Delay between updates]:delay: " "($help)--update-delay=[Delay between updates]:delay: "
"($help)--update-failure-action=[Action on update failure]:mode:(pause continue)" "($help)--update-failure-action=[Action on update failure]:mode:(pause continue)"
"($help)--update-max-failure-ratio=[Failure rate to tolerate during an update]:fraction: " "($help)--update-max-failure-ratio=[Failure rate to tolerate during an update]:fraction: "
...@@ -1122,8 +1791,14 @@ __docker_service_subcommand() { ...@@ -1122,8 +1791,14 @@ __docker_service_subcommand() {
$opts_help \ $opts_help \
$opts_create_update \ $opts_create_update \
"($help)*--container-label=[Container labels]:label: " \ "($help)*--container-label=[Container labels]:label: " \
"($help)*--dns=[Set custom DNS servers]:DNS: " \
"($help)*--dns-option=[Set DNS options]:DNS option: " \
"($help)*--dns-search=[Set custom DNS search domains]:DNS search: " \
"($help)*--env-file=[Read environment variables from a file]:environment file:_files" \
"($help)--mode=[Service Mode]:mode:(global replicated)" \ "($help)--mode=[Service Mode]:mode:(global replicated)" \
"($help -): :__docker_images" \ "($help)--name=[Service name]:name: " \
"($help)*--publish=[Publish a port]:port: " \
"($help -): :__docker_complete_images" \
"($help -):command: _command_names -e" \ "($help -):command: _command_names -e" \
"($help -)*::arguments: _normal" && ret=0 "($help -)*::arguments: _normal" && ret=0
;; ;;
...@@ -1167,10 +1842,10 @@ __docker_service_subcommand() { ...@@ -1167,10 +1842,10 @@ __docker_service_subcommand() {
(ps) (ps)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -a --all)"{-a,--all}"[Display all tasks]" \
"($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \ "($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \
"($help)--no-resolve[Do not map IDs to Names]" \ "($help)--no-resolve[Do not map IDs to Names]" \
"($help)--no-trunc[Do not truncate output]" \ "($help)--no-trunc[Do not truncate output]" \
"($help -q --quiet)"{-q,--quiet}"[Only display task IDs]" \
"($help -)1:service:__docker_complete_services" && ret=0 "($help -)1:service:__docker_complete_services" && ret=0
case $state in case $state in
(filter-options) (filter-options)
...@@ -1178,28 +1853,178 @@ __docker_service_subcommand() { ...@@ -1178,28 +1853,178 @@ __docker_service_subcommand() {
;; ;;
esac esac
;; ;;
(update) (update)
_arguments $(__docker_arguments) \
$opts_help \
$opts_create_update \
"($help)--arg=[Service command args]:arguments: _normal" \
"($help)*--container-label-add=[Add or update container labels]:label: " \
"($help)*--container-label-rm=[Remove a container label by its key]:label: " \
"($help)*--dns-add=[Add or update custom DNS servers]:DNS: " \
"($help)*--dns-rm=[Remove custom DNS servers]:DNS: " \
"($help)*--dns-option-add=[Add or update DNS options]:DNS option: " \
"($help)*--dns-option-rm=[Remove DNS options]:DNS option: " \
"($help)*--dns-search-add=[Add or update custom DNS search domains]:DNS search: " \
"($help)*--dns-search-rm=[Remove DNS search domains]:DNS search: " \
"($help)--force[Force update]" \
"($help)*--group-add=[Add additional supplementary user groups to the container]:group:_groups" \
"($help)*--group-rm=[Remove previously added supplementary user groups from the container]:group:_groups" \
"($help)--image=[Service image tag]:image:__docker_complete_repositories" \
"($help)*--publish-add=[Add or update a port]:port: " \
"($help)*--publish-rm=[Remove a port(target-port mandatory)]:port: " \
"($help)--rollback[Rollback to previous specification]" \
"($help -)1:service:__docker_complete_services" && ret=0
;;
(help)
_arguments $(__docker_arguments) ":subcommand:__docker_service_commands" && ret=0
;;
esac
return ret
}
# EO service
# BO stack
__docker_stack_complete_ps_filters() {
[[ $PREFIX = -* ]] && return 1
integer ret=1
if compset -P '*='; then
case "${${words[-1]%=*}#*=}" in
(desired-state)
state_opts=('accepted' 'running')
_describe -t state-opts "desired state options" state_opts && ret=0
;;
*)
_message 'value' && ret=0
;;
esac
else
opts=('desired-state' 'id' 'name')
_describe -t filter-opts "filter options" opts -qS "=" && ret=0
fi
return ret
}
__docker_stack_complete_services_filters() {
[[ $PREFIX = -* ]] && return 1
integer ret=1
if compset -P '*='; then
case "${${words[-1]%=*}#*=}" in
*)
_message 'value' && ret=0
;;
esac
else
opts=('id' 'label' 'name')
_describe -t filter-opts "filter options" opts -qS "=" && ret=0
fi
return ret
}
__docker_stacks() {
[[ $PREFIX = -* ]] && return 1
integer ret=1
local line s
declare -a lines stacks
lines=(${(f)${:-"$(_call_program commands docker $docker_options stack ls)"$'\n'}})
# Parse header line to find columns
local i=1 j=1 k header=${lines[1]}
declare -A begin end
while (( j < ${#header} - 1 )); do
i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 ))
k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
begin[${header[$i,$((j-1))]}]=$i
end[${header[$i,$((j-1))]}]=$k
done
end[${header[$i,$((j-1))]}]=-1
lines=(${lines[2,-1]})
# Service ID
for line in $lines; do
s="${line[${begin[ID]},${end[ID]}]%% ##}"
stacks=($stacks $s)
done
_describe -t stacks-list "stacks" stacks "$@" && ret=0
return ret
}
__docker_complete_stacks() {
[[ $PREFIX = -* ]] && return 1
__docker_stacks "$@"
}
__docker_stack_commands() {
local -a _docker_stack_subcommands
_docker_stack_subcommands=(
"deploy:Deploy a new stack or update an existing stack"
"ls:List stacks"
"ps:List the tasks in the stack"
"rm:Remove the stack"
"services:List the services in the stack"
)
_describe -t docker-stack-commands "docker stack command" _docker_stack_subcommands
}
__docker_stack_subcommand() {
local -a _command_args opts_help
local expl help="--help"
integer ret=1
opts_help=("(: -)--help[Print usage]")
case "$words[1]" in
(deploy|up)
_arguments $(__docker_arguments) \
$opts_help \
"($help)--bundle-file=[Path to a Distributed Application Bundle file]:dab:_files -g \"*.dab\"" \
"($help -c --compose-file)"{-c=,--compose-file=}"[Path to a Compose file]:compose file:_files -g \"*.(yml|yaml)\"" \
"($help)--with-registry-auth[Send registry authentication details to Swarm agents]" \
"($help -):stack:__docker_complete_stacks" && ret=0
;;
(ls|list)
_arguments $(__docker_arguments) \
$opts_help && ret=0
;;
(ps)
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --all)"{-a,--all}"[Display all tasks]" \
"($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:__docker_stack_complete_ps_filters" \
"($help)--no-resolve[Do not map IDs to Names]" \
"($help)--no-trunc[Do not truncate output]" \
"($help -):stack:__docker_complete_stacks" && ret=0
;;
(rm|remove|down)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
$opts_create_update \ "($help -):stack:__docker_complete_stacks" && ret=0
"($help)--arg=[Service command args]:arguments: _normal" \ ;;
"($help)*--container-label-add=[Add or update container labels]:label: " \ (services)
"($help)*--container-label-rm=[Remove a container label by its key]:label: " \ _arguments $(__docker_arguments) \
"($help)--force[Force update]" \ $opts_help \
"($help)*--group-rm=[Remove previously added user groups from the container]:group:_groups" \ "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:__docker_stack_complete_services_filters" \
"($help)--image=[Service image tag]:image:__docker_repositories" \ "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" \
"($help)--rollback[Rollback to previous specification]" \ "($help -):stack:__docker_complete_stacks" && ret=0
"($help -)1:service:__docker_complete_services" && ret=0
;; ;;
(help) (help)
_arguments $(__docker_arguments) ":subcommand:__docker_service_commands" && ret=0 _arguments $(__docker_arguments) ":subcommand:__docker_stack_commands" && ret=0
;; ;;
esac esac
return ret return ret
} }
# EO service # EO stack
# BO swarm # BO swarm
...@@ -1229,7 +2054,10 @@ __docker_swarm_subcommand() { ...@@ -1229,7 +2054,10 @@ __docker_swarm_subcommand() {
"($help)--advertise-addr[Advertised address]:ip\:port: " \ "($help)--advertise-addr[Advertised address]:ip\:port: " \
"($help)*--external-ca=[Specifications of one or more certificate signing endpoints]:endpoint: " \ "($help)*--external-ca=[Specifications of one or more certificate signing endpoints]:endpoint: " \
"($help)--force-new-cluster[Force create a new cluster from current state]" \ "($help)--force-new-cluster[Force create a new cluster from current state]" \
"($help)--listen-addr=[Listen address]:ip\:port: " && ret=0 "($help)--listen-addr=[Listen address]:ip\:port: " \
"($help)--max-snapshots[Number of additional Raft snapshots to retain]" \
"($help)--snapshot-interval[Number of log entries between Raft snapshots]" \
"($help)--task-history-limit=[Task history retention limit]:limit: " && ret=0
;; ;;
(join) (join)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
...@@ -1248,13 +2076,17 @@ __docker_swarm_subcommand() { ...@@ -1248,13 +2076,17 @@ __docker_swarm_subcommand() {
;; ;;
(leave) (leave)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help && ret=0 $opts_help \
"($help -f --force)"{-f,--force}"[Force this node to leave the swarm, ignoring warnings]" && ret=0
;; ;;
(update) (update)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help)--cert-expiry=[Validity period for node certificates]:duration: " \ "($help)--cert-expiry=[Validity period for node certificates]:duration: " \
"($help)*--external-ca=[Specifications of one or more certificate signing endpoints]:endpoint: " \
"($help)--dispatcher-heartbeat=[Dispatcher heartbeat period]:duration: " \ "($help)--dispatcher-heartbeat=[Dispatcher heartbeat period]:duration: " \
"($help)--max-snapshots[Number of additional Raft snapshots to retain]" \
"($help)--snapshot-interval[Number of log entries between Raft snapshots]" \
"($help)--task-history-limit=[Task history retention limit]:limit: " && ret=0 "($help)--task-history-limit=[Task history retention limit]:limit: " && ret=0
;; ;;
(help) (help)
...@@ -1267,6 +2099,61 @@ __docker_swarm_subcommand() { ...@@ -1267,6 +2099,61 @@ __docker_swarm_subcommand() {
# EO swarm # EO swarm
# BO system
__docker_system_commands() {
local -a _docker_system_subcommands
_docker_system_subcommands=(
"df:Show docker filesystem usage"
"events:Get real time events from the server"
"info:Display system-wide information"
"prune:Remove unused data"
)
_describe -t docker-system-commands "docker system command" _docker_system_subcommands
}
__docker_system_subcommand() {
local -a _command_args opts_help
local expl help="--help"
integer ret=1
opts_help=("(: -)--help[Print usage]")
case "$words[1]" in
(df)
_arguments $(__docker_arguments) \
$opts_help \
"($help -v --verbose)"{-v,--verbose}"[Show detailed information on space usage]" && ret=0
;;
(events)
_arguments $(__docker_arguments) \
$opts_help \
"($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_events_filter" \
"($help)--since=[Events created since this timestamp]:timestamp: " \
"($help)--until=[Events created until this timestamp]:timestamp: " \
"($help)--format=[Format the output using the given go template]:template: " && ret=0
;;
(info)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " && ret=0
;;
(prune)
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --all)"{-a,--all}"[Remove all unused data, not just dangling ones]" \
"($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0
;;
(help)
_arguments $(__docker_arguments) ":subcommand:__docker_volume_commands" && ret=0
;;
esac
return ret
}
# EO system
# BO volume # BO volume
__docker_volume_complete_ls_filters() { __docker_volume_complete_ls_filters() {
...@@ -1283,7 +2170,7 @@ __docker_volume_complete_ls_filters() { ...@@ -1283,7 +2170,7 @@ __docker_volume_complete_ls_filters() {
__docker_complete_info_plugins Volume && ret=0 __docker_complete_info_plugins Volume && ret=0
;; ;;
(name) (name)
__docker_volumes && ret=0 __docker_complete_volumes && ret=0
;; ;;
*) *)
_message 'value' && ret=0 _message 'value' && ret=0
...@@ -1297,7 +2184,7 @@ __docker_volume_complete_ls_filters() { ...@@ -1297,7 +2184,7 @@ __docker_volume_complete_ls_filters() {
return ret return ret
} }
__docker_volumes() { __docker_complete_volumes() {
[[ $PREFIX = -* ]] && return 1 [[ $PREFIX = -* ]] && return 1
integer ret=1 integer ret=1
declare -a lines volumes declare -a lines volumes
...@@ -1335,6 +2222,7 @@ __docker_volume_commands() { ...@@ -1335,6 +2222,7 @@ __docker_volume_commands() {
"create:Create a volume" "create:Create a volume"
"inspect:Display detailed information on one or more volumes" "inspect:Display detailed information on one or more volumes"
"ls:List volumes" "ls:List volumes"
"prune:Remove all unused volumes"
"rm:Remove one or more volumes" "rm:Remove one or more volumes"
) )
_describe -t docker-volume-commands "docker volume command" _docker_volume_subcommands _describe -t docker-volume-commands "docker volume command" _docker_volume_subcommands
...@@ -1360,7 +2248,7 @@ __docker_volume_subcommand() { ...@@ -1360,7 +2248,7 @@ __docker_volume_subcommand() {
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \
"($help -)1:volume:__docker_volumes" && ret=0 "($help -)1:volume:__docker_complete_volumes" && ret=0
;; ;;
(ls) (ls)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
...@@ -1374,11 +2262,16 @@ __docker_volume_subcommand() { ...@@ -1374,11 +2262,16 @@ __docker_volume_subcommand() {
;; ;;
esac esac
;; ;;
(prune)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0
;;
(rm) (rm)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -f --force)"{-f,--force}"[Force the removal of one or more volumes]" \ "($help -f --force)"{-f,--force}"[Force the removal of one or more volumes]" \
"($help -):volume:__docker_volumes" && ret=0 "($help -):volume:__docker_complete_volumes" && ret=0
;; ;;
(help) (help)
_arguments $(__docker_arguments) ":subcommand:__docker_volume_commands" && ret=0 _arguments $(__docker_arguments) ":subcommand:__docker_volume_commands" && ret=0
...@@ -1408,7 +2301,7 @@ __docker_commands() { ...@@ -1408,7 +2301,7 @@ __docker_commands() {
then then
local -a lines local -a lines
lines=(${(f)"$(_call_program commands docker 2>&1)"}) lines=(${(f)"$(_call_program commands docker 2>&1)"})
_docker_subcommands=(${${${lines[$((${lines[(i)Commands:]} + 1)),${lines[(I) *]}]}## #}/ ##/:}) _docker_subcommands=(${${${(M)${lines[$((${lines[(i)*Commands:]} + 1)),-1]}:# *}## #}/ ##/:})
_docker_subcommands=($_docker_subcommands 'daemon:Enable daemon mode' 'help:Show help for a command') _docker_subcommands=($_docker_subcommands 'daemon:Enable daemon mode' 'help:Show help for a command')
(( $#_docker_subcommands > 2 )) && _store_cache docker_subcommands _docker_subcommands (( $#_docker_subcommands > 2 )) && _store_cache docker_subcommands _docker_subcommands
fi fi
...@@ -1416,188 +2309,61 @@ __docker_commands() { ...@@ -1416,188 +2309,61 @@ __docker_commands() {
} }
__docker_subcommand() { __docker_subcommand() {
local -a _command_args opts_help opts_build_create_run opts_build_create_run_update opts_create_run opts_create_run_update local -a _command_args opts_help
local expl help="--help" local expl help="--help"
integer ret=1 integer ret=1
opts_help=("(: -)--help[Print usage]") opts_help=("(: -)--help[Print usage]")
opts_build_create_run=(
"($help)--cgroup-parent=[Parent cgroup for the container]:cgroup: "
"($help)--isolation=[Container isolation technology]:isolation:(default hyperv process)"
"($help)--disable-content-trust[Skip image verification]"
"($help)*--shm-size=[Size of '/dev/shm' (format is '<number><unit>')]:shm size: "
"($help)*--ulimit=[ulimit options]:ulimit: "
"($help)--userns=[Container user namespace]:user namespace:(host)"
)
opts_build_create_run_update=(
"($help -c --cpu-shares)"{-c=,--cpu-shares=}"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)"
"($help)--cpu-period=[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: "
"($help)--cpu-quota=[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: "
"($help)--cpuset-cpus=[CPUs in which to allow execution]:CPUs: "
"($help)--cpuset-mems=[MEMs in which to allow execution]:MEMs: "
"($help -m --memory)"{-m=,--memory=}"[Memory limit]:Memory limit: "
"($help)--memory-swap=[Total memory limit with swap]:Memory limit: "
)
opts_create_run=(
"($help -a --attach)"{-a=,--attach=}"[Attach to stdin, stdout or stderr]:device:(STDIN STDOUT STDERR)"
"($help)*--add-host=[Add a custom host-to-IP mapping]:host\:ip mapping: "
"($help)*--blkio-weight-device=[Block IO (relative device weight)]:device:Block IO weight: "
"($help)*--cap-add=[Add Linux capabilities]:capability: "
"($help)*--cap-drop=[Drop Linux capabilities]:capability: "
"($help)--cidfile=[Write the container ID to the file]:CID file:_files"
"($help)*--device=[Add a host device to the container]:device:_files"
"($help)*--device-read-bps=[Limit the read rate (bytes per second) from a device]:device:IO rate: "
"($help)*--device-read-iops=[Limit the read rate (IO per second) from a device]:device:IO rate: "
"($help)*--device-write-bps=[Limit the write rate (bytes per second) to a device]:device:IO rate: "
"($help)*--device-write-iops=[Limit the write rate (IO per second) to a device]:device:IO rate: "
"($help)*--dns=[Custom DNS servers]:DNS server: "
"($help)*--dns-opt=[Custom DNS options]:DNS option: "
"($help)*--dns-search=[Custom DNS search domains]:DNS domains: "
"($help)*"{-e=,--env=}"[Environment variables]:environment variable: "
"($help)--entrypoint=[Overwrite the default entrypoint of the image]:entry point: "
"($help)*--env-file=[Read environment variables from a file]:environment file:_files"
"($help)*--expose=[Expose a port from the container without publishing it]: "
"($help)*--group-add=[Add additional groups to run as]:group:_groups"
"($help -h --hostname)"{-h=,--hostname=}"[Container host name]:hostname:_hosts"
"($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]"
"($help)--ip=[Container IPv4 address]:IPv4: "
"($help)--ip6=[Container IPv6 address]:IPv6: "
"($help)--ipc=[IPC namespace to use]:IPC namespace: "
"($help)*--link=[Add link to another container]:link:->link"
"($help)*--link-local-ip=[Add a link-local address for the container]:IPv4/IPv6: "
"($help)*"{-l=,--label=}"[Container metadata]:label: "
"($help)--log-driver=[Default driver for container logs]:logging driver:__docker_log_drivers"
"($help)*--log-opt=[Log driver specific options]:log driver options:__docker_log_options"
"($help)--mac-address=[Container MAC address]:MAC address: "
"($help)--name=[Container name]:name: "
"($help)--network=[Connect a container to a network]:network mode:(bridge none container host)"
"($help)*--network-alias=[Add network-scoped alias for the container]:alias: "
"($help)--oom-kill-disable[Disable OOM Killer]"
"($help)--oom-score-adj[Tune the host's OOM preferences for containers (accepts -1000 to 1000)]"
"($help)--pids-limit[Tune container pids limit (set -1 for unlimited)]"
"($help -P --publish-all)"{-P,--publish-all}"[Publish all exposed ports]"
"($help)*"{-p=,--publish=}"[Expose a container's port to the host]:port:_ports"
"($help)--pid=[PID namespace to use]:PID namespace:__docker_complete_pid"
"($help)--privileged[Give extended privileges to this container]"
"($help)--read-only[Mount the container's root filesystem as read only]"
"($help)*--security-opt=[Security options]:security option: "
"($help)*--sysctl=-[sysctl options]:sysctl: "
"($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]"
"($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users"
"($help)--tmpfs[mount tmpfs]"
"($help)*-v[Bind mount a volume]:volume: "
"($help)--volume-driver=[Optional volume driver for the container]:volume driver:(local)"
"($help)*--volumes-from=[Mount volumes from the specified container]:volume: "
"($help -w --workdir)"{-w=,--workdir=}"[Working directory inside the container]:directory:_directories"
)
opts_create_run_update=(
"($help)--blkio-weight=[Block IO (relative weight), between 10 and 1000]:Block IO weight:(10 100 500 1000)"
"($help)--kernel-memory=[Kernel memory limit in bytes]:Memory limit: "
"($help)--memory-reservation=[Memory soft limit]:Memory limit: "
"($help)--restart=[Restart policy]:restart policy:(no on-failure always unless-stopped)"
)
opts_attach_exec_run_start=(
"($help)--detach-keys=[Escape key sequence used to detach a container]:sequence:__docker_complete_detach_keys"
)
case "$words[1]" in case "$words[1]" in
(attach) (attach|commit|cp|create|diff|exec|export|kill|logs|pause|unpause|port|rename|restart|rm|run|start|stats|stop|top|update|wait)
_arguments $(__docker_arguments) \ __docker_container_subcommand && ret=0
$opts_help \
$opts_attach_exec_run_start \
"($help)--no-stdin[Do not attach stdin]" \
"($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \
"($help -):containers:__docker_runningcontainers" && ret=0
;;
(build)
_arguments $(__docker_arguments) \
$opts_help \
$opts_build_create_run \
$opts_build_create_run_update \
"($help)*--build-arg[Build-time variables]:<varname>=<value>: " \
"($help)--compress[Compress the build context using gzip]" \
"($help -f --file)"{-f=,--file=}"[Name of the Dockerfile]:Dockerfile:_files" \
"($help)--force-rm[Always remove intermediate containers]" \
"($help)*--label=[Set metadata for an image]:label=value: " \
"($help)--no-cache[Do not use cache when building the image]" \
"($help)--pull[Attempt to pull a newer version of the image]" \
"($help -q --quiet)"{-q,--quiet}"[Suppress verbose build output]" \
"($help)--rm[Remove intermediate containers after a successful build]" \
"($help -t --tag)*"{-t=,--tag=}"[Repository, name and tag for the image]: :__docker_repositories_with_tags" \
"($help -):path or URL:_directories" && ret=0
;;
(commit)
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --author)"{-a=,--author=}"[Author]:author: " \
"($help)*"{-c=,--change=}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \
"($help -m --message)"{-m=,--message=}"[Commit message]:message: " \
"($help -p --pause)"{-p,--pause}"[Pause container during commit]" \
"($help -):container:__docker_containers" \
"($help -): :__docker_repositories_with_tags" && ret=0
;; ;;
(cp) (build|history|import|load|pull|push|save|tag)
_arguments $(__docker_arguments) \ __docker_image_subcommand && ret=0
$opts_help \
"($help -L --follow-link)"{-L,--follow-link}"[Always follow symbol link]" \
"($help -)1:container:->container" \
"($help -)2:hostpath:_files" && ret=0
case $state in
(container)
if compset -P "*:"; then
_files && ret=0
else
__docker_containers -qS ":" && ret=0
fi
;;
esac
;; ;;
(create) (container)
local curcontext="$curcontext" state
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
$opts_build_create_run \ "($help -): :->command" \
$opts_build_create_run_update \ "($help -)*:: :->option-or-argument" && ret=0
$opts_create_run \
$opts_create_run_update \
"($help -): :__docker_images" \
"($help -):command: _command_names -e" \
"($help -)*::arguments: _normal" && ret=0
case $state in case $state in
(link) (command)
if compset -P "*:"; then __docker_container_commands && ret=0
_wanted alias expl "Alias" compadd -E "" && ret=0 ;;
else (option-or-argument)
__docker_runningcontainers -qS ":" && ret=0 curcontext=${curcontext%:*:*}:docker-${words[-1]}:
fi __docker_container_subcommand && ret=0
;; ;;
esac esac
;; ;;
(daemon) (daemon)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help)*--add-runtime=[Register an additional OCI compatible runtime]:runtime:__docker_complete_runtimes" \ "($help)*--add-runtime=[Register an additional OCI compatible runtime]:runtime:__docker_complete_runtimes" \
"($help)--api-cors-header=[CORS headers in the remote API]:CORS headers: " \ "($help)--api-cors-header=[CORS headers in the Engine API]:CORS headers: " \
"($help)*--authorization-plugin=[Authorization plugins to load]" \ "($help)*--authorization-plugin=[Authorization plugins to load]" \
"($help -b --bridge)"{-b=,--bridge=}"[Attach containers to a network bridge]:bridge:_net_interfaces" \ "($help -b --bridge)"{-b=,--bridge=}"[Attach containers to a network bridge]:bridge:_net_interfaces" \
"($help)--bip=[Network bridge IP]:IP address: " \ "($help)--bip=[Network bridge IP]:IP address: " \
"($help)--cgroup-parent=[Parent cgroup for all containers]:cgroup: " \ "($help)--cgroup-parent=[Parent cgroup for all containers]:cgroup: " \
"($help)--cluster-advertise=[Address or interface name to advertise]:Instance to advertise (host\:port): " \
"($help)--cluster-store=[URL of the distributed storage backend]:Cluster Store:->cluster-store" \
"($help)*--cluster-store-opt=[Cluster store options]:Cluster options:->cluster-store-options" \
"($help)--config-file=[Path to daemon configuration file]:Config File:_files" \ "($help)--config-file=[Path to daemon configuration file]:Config File:_files" \
"($help)--containerd=[Path to containerd socket]:socket:_files -g \"*.sock\"" \ "($help)--containerd=[Path to containerd socket]:socket:_files -g \"*.sock\"" \
"($help -D --debug)"{-D,--debug}"[Enable debug mode]" \ "($help -D --debug)"{-D,--debug}"[Enable debug mode]" \
"($help)--default-gateway[Container default gateway IPv4 address]:IPv4 address: " \ "($help)--default-gateway[Container default gateway IPv4 address]:IPv4 address: " \
"($help)--default-gateway-v6[Container default gateway IPv6 address]:IPv6 address: " \ "($help)--default-gateway-v6[Container default gateway IPv6 address]:IPv6 address: " \
"($help)--cluster-store=[URL of the distributed storage backend]:Cluster Store:->cluster-store" \
"($help)--cluster-advertise=[Address or interface name to advertise]:Instance to advertise (host\:port): " \
"($help)*--cluster-store-opt=[Cluster store options]:Cluster options:->cluster-store-options" \
"($help)*--dns=[DNS server to use]:DNS: " \
"($help)*--dns-search=[DNS search domains to use]:DNS search: " \
"($help)*--dns-opt=[DNS options to use]:DNS option: " \
"($help)*--default-ulimit=[Default ulimits for containers]:ulimit: " \ "($help)*--default-ulimit=[Default ulimits for containers]:ulimit: " \
"($help)--disable-legacy-registry[Disable contacting legacy registries]" \ "($help)--disable-legacy-registry[Disable contacting legacy registries]" \
"($help)*--dns=[DNS server to use]:DNS: " \
"($help)*--dns-opt=[DNS options to use]:DNS option: " \
"($help)*--dns-search=[DNS search domains to use]:DNS search: " \
"($help)*--exec-opt=[Runtime execution options]:runtime execution options: " \ "($help)*--exec-opt=[Runtime execution options]:runtime execution options: " \
"($help)--exec-root=[Root directory for execution state files]:path:_directories" \ "($help)--exec-root=[Root directory for execution state files]:path:_directories" \
"($help)--experimental[Enable experimental features]" \
"($help)--fixed-cidr=[IPv4 subnet for fixed IPs]:IPv4 subnet: " \ "($help)--fixed-cidr=[IPv4 subnet for fixed IPs]:IPv4 subnet: " \
"($help)--fixed-cidr-v6=[IPv6 subnet for fixed IPs]:IPv6 subnet: " \ "($help)--fixed-cidr-v6=[IPv6 subnet for fixed IPs]:IPv6 subnet: " \
"($help -G --group)"{-G=,--group=}"[Group for the unix socket]:group:_groups" \ "($help -G --group)"{-G=,--group=}"[Group for the unix socket]:group:_groups" \
...@@ -1614,8 +2380,8 @@ __docker_subcommand() { ...@@ -1614,8 +2380,8 @@ __docker_subcommand() {
"($help -l --log-level)"{-l=,--log-level=}"[Logging level]:level:(debug info warn error fatal)" \ "($help -l --log-level)"{-l=,--log-level=}"[Logging level]:level:(debug info warn error fatal)" \
"($help)*--label=[Key=value labels]:label: " \ "($help)*--label=[Key=value labels]:label: " \
"($help)--live-restore[Enable live restore of docker when containers are still running]" \ "($help)--live-restore[Enable live restore of docker when containers are still running]" \
"($help)--log-driver=[Default driver for container logs]:logging driver:__docker_log_drivers" \ "($help)--log-driver=[Default driver for container logs]:logging driver:__docker_complete_log_drivers" \
"($help)*--log-opt=[Default log driver options for containers]:log driver options:__docker_log_options" \ "($help)*--log-opt=[Default log driver options for containers]:log driver options:__docker_complete_log_options" \
"($help)--max-concurrent-downloads[Set the max concurrent downloads for each pull]" \ "($help)--max-concurrent-downloads[Set the max concurrent downloads for each pull]" \
"($help)--max-concurrent-uploads[Set the max concurrent uploads for each push]" \ "($help)--max-concurrent-uploads[Set the max concurrent uploads for each push]" \
"($help)--mtu=[Network MTU]:mtu:(0 576 1420 1500 9000)" \ "($help)--mtu=[Network MTU]:mtu:(0 576 1420 1500 9000)" \
...@@ -1623,8 +2389,10 @@ __docker_subcommand() { ...@@ -1623,8 +2389,10 @@ __docker_subcommand() {
"($help -p --pidfile)"{-p=,--pidfile=}"[Path to use for daemon PID file]:PID file:_files" \ "($help -p --pidfile)"{-p=,--pidfile=}"[Path to use for daemon PID file]:PID file:_files" \
"($help)--raw-logs[Full timestamps without ANSI coloring]" \ "($help)--raw-logs[Full timestamps without ANSI coloring]" \
"($help)*--registry-mirror=[Preferred Docker registry mirror]:registry mirror: " \ "($help)*--registry-mirror=[Preferred Docker registry mirror]:registry mirror: " \
"($help)--seccomp-profile=[Path to seccomp profile]:path:_files -g \"*.json\"" \
"($help -s --storage-driver)"{-s=,--storage-driver=}"[Storage driver to use]:driver:(aufs btrfs devicemapper overlay overlay2 vfs zfs)" \ "($help -s --storage-driver)"{-s=,--storage-driver=}"[Storage driver to use]:driver:(aufs btrfs devicemapper overlay overlay2 vfs zfs)" \
"($help)--selinux-enabled[Enable selinux support]" \ "($help)--selinux-enabled[Enable selinux support]" \
"($help)--shutdown-timeout=[Set the shutdown timeout value in seconds]:time: " \
"($help)*--storage-opt=[Storage driver options]:storage driver options: " \ "($help)*--storage-opt=[Storage driver options]:storage driver options: " \
"($help)--tls[Use TLS]" \ "($help)--tls[Use TLS]" \
"($help)--tlscacert=[Trust certs signed only by this CA]:PEM file:_files -g \"*.(pem|crt)\"" \ "($help)--tlscacert=[Trust certs signed only by this CA]:PEM file:_files -g \"*.(pem|crt)\"" \
...@@ -1632,113 +2400,59 @@ __docker_subcommand() { ...@@ -1632,113 +2400,59 @@ __docker_subcommand() {
"($help)--tlskey=[Path to TLS key file]:Key file:_files -g \"*.(pem|key)\"" \ "($help)--tlskey=[Path to TLS key file]:Key file:_files -g \"*.(pem|key)\"" \
"($help)--tlsverify[Use TLS and verify the remote]" \ "($help)--tlsverify[Use TLS and verify the remote]" \
"($help)--userns-remap=[User/Group setting for user namespaces]:user\:group:->users-groups" \ "($help)--userns-remap=[User/Group setting for user namespaces]:user\:group:->users-groups" \
"($help)--userland-proxy[Use userland proxy for loopback traffic]" && ret=0 "($help)--userland-proxy[Use userland proxy for loopback traffic]" \
"($help)--userland-proxy-path=[Path to the userland proxy binary]:binary:_files" && ret=0
case $state in case $state in
(cluster-store) (cluster-store)
if compset -P '*://'; then if compset -P '*://'; then
_message 'host:port' && ret=0 _message 'host:port' && ret=0
else else
store=('consul' 'etcd' 'zk') store=('consul' 'etcd' 'zk')
_describe -t cluster-store "Cluster Store" store -qS "://" && ret=0 _describe -t cluster-store "Cluster Store" store -qS "://" && ret=0
fi fi
;; ;;
(cluster-store-options) (cluster-store-options)
if compset -P '*='; then if compset -P '*='; then
_files && ret=0 _files && ret=0
else else
opts=('discovery.heartbeat' 'discovery.ttl' 'kv.cacertfile' 'kv.certfile' 'kv.keyfile' 'kv.path') opts=('discovery.heartbeat' 'discovery.ttl' 'kv.cacertfile' 'kv.certfile' 'kv.keyfile' 'kv.path')
_describe -t cluster-store-opts "Cluster Store Options" opts -qS "=" && ret=0 _describe -t cluster-store-opts "Cluster Store Options" opts -qS "=" && ret=0
fi fi
;; ;;
(users-groups) (users-groups)
if compset -P '*:'; then if compset -P '*:'; then
_groups && ret=0 _groups && ret=0
else else
_describe -t userns-default "default Docker user management" '(default)' && ret=0 _describe -t userns-default "default Docker user management" '(default)' && ret=0
_users && ret=0 _users && ret=0
fi fi
;;
esac
;;
(diff)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)*:containers:__docker_containers" && ret=0
;;
(events)
_arguments $(__docker_arguments) \
$opts_help \
"($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_events_filter" \
"($help)--since=[Events created since this timestamp]:timestamp: " \
"($help)--until=[Events created until this timestamp]:timestamp: " \
"($help)--format=[Format the output using the given go template]:template: " && ret=0
;;
(exec)
local state
_arguments $(__docker_arguments) \
$opts_help \
$opts_attach_exec_run_start \
"($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \
"($help -e --env)"{-e,--env}"[Set environment variables]" \
"($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]" \
"($help)--privileged[Give extended Linux capabilities to the command]" \
"($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]" \
"($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" \
"($help -):containers:__docker_runningcontainers" \
"($help -)*::command:->anycommand" && ret=0
case $state in
(anycommand)
shift 1 words
(( CURRENT-- ))
_normal && ret=0
;; ;;
esac esac
;; ;;
(export) (events|info)
_arguments $(__docker_arguments) \ __docker_system_subcommand && ret=0
$opts_help \
"($help -o --output)"{-o=,--output=}"[Write to a file, instead of stdout]:output file:_files" \
"($help -)*:containers:__docker_containers" && ret=0
;;
(history)
_arguments $(__docker_arguments) \
$opts_help \
"($help -H --human)"{-H,--human}"[Print sizes and dates in human readable format]" \
"($help)--no-trunc[Do not truncate output]" \
"($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
"($help -)*: :__docker_images" && ret=0
;; ;;
(images) (image)
local curcontext="$curcontext" state
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -a --all)"{-a,--all}"[Show all images]" \ "($help -): :->command" \
"($help)--digests[Show digests]" \ "($help -)*:: :->option-or-argument" && ret=0
"($help)*"{-f=,--filter=}"[Filter values]:filter:->filter-options" \
"($help)--format=[Pretty-print images using a Go template]:template: " \
"($help)--no-trunc[Do not truncate output]" \
"($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
"($help -): :__docker_repositories" && ret=0
case $state in case $state in
(filter-options) (command)
__docker_complete_images_filters && ret=0 __docker_image_commands && ret=0
;;
(option-or-argument)
curcontext=${curcontext%:*:*}:docker-${words[-1]}:
__docker_image_subcommand && ret=0
;; ;;
esac esac
;; ;;
(import) (images)
_arguments $(__docker_arguments) \ words[1]='ls'
$opts_help \ __docker_image_subcommand && ret=0
"($help)*"{-c=,--change=}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \
"($help -m --message)"{-m=,--message=}"[Commit message for imported image]:message: " \
"($help -):URL:(- http:// file://)" \
"($help -): :__docker_repositories_with_tags" && ret=0
;;
(info|version)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " && ret=0
;; ;;
(inspect) (inspect)
local state local state
...@@ -1746,33 +2460,37 @@ __docker_subcommand() { ...@@ -1746,33 +2460,37 @@ __docker_subcommand() {
$opts_help \ $opts_help \
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \
"($help -s --size)"{-s,--size}"[Display total file sizes if the type is container]" \ "($help -s --size)"{-s,--size}"[Display total file sizes if the type is container]" \
"($help)--type=[Return JSON for specified type]:type:(image container)" \ "($help)--type=[Return JSON for specified type]:type:(container image network node plugin service volume)" \
"($help -)*: :->values" && ret=0 "($help -)*: :->values" && ret=0
case $state in case $state in
(values) (values)
if [[ ${words[(r)--type=container]} == --type=container ]]; then if [[ ${words[(r)--type=container]} == --type=container ]]; then
__docker_containers && ret=0 __docker_complete_containers && ret=0
elif [[ ${words[(r)--type=image]} == --type=image ]]; then elif [[ ${words[(r)--type=image]} == --type=image ]]; then
__docker_images && ret=0 __docker_complete_images && ret=0
elif [[ ${words[(r)--type=network]} == --type=network ]]; then
__docker_complete_networks && ret=0
elif [[ ${words[(r)--type=node]} == --type=node ]]; then
__docker_complete_nodes && ret=0
elif [[ ${words[(r)--type=plugin]} == --type=plugin ]]; then
__docker_complete_plugins && ret=0
elif [[ ${words[(r)--type=service]} == --type=service ]]; then
__docker_complete_services && ret=0
elif [[ ${words[(r)--type=volume]} == --type=volume ]]; then
__docker_complete_volumes && ret=0
else else
__docker_images && __docker_containers && ret=0 __docker_complete_containers
__docker_complete_images
__docker_complete_networks
__docker_complete_nodes
__docker_complete_plugins
__docker_complete_services
__docker_complete_volumes && ret=0
fi fi
;; ;;
esac esac
;; ;;
(kill)
_arguments $(__docker_arguments) \
$opts_help \
"($help -s --signal)"{-s=,--signal=}"[Signal to send]:signal:_signals" \
"($help -)*:containers:__docker_runningcontainers" && ret=0
;;
(load)
_arguments $(__docker_arguments) \
$opts_help \
"($help -i --input)"{-i=,--input=}"[Read from tar archive file]:archive file:_files -g \"*.((tar|TAR)(.gz|.GZ|.Z|.bz2|.lzma|.xz|)|(tbz|tgz|txz))(-.)\"" \
"($help -q --quiet)"{-q,--quiet}"[Suppress the load output]" && ret=0
;;
(login) (login)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
...@@ -1785,16 +2503,6 @@ __docker_subcommand() { ...@@ -1785,16 +2503,6 @@ __docker_subcommand() {
$opts_help \ $opts_help \
"($help -)1:server: " && ret=0 "($help -)1:server: " && ret=0
;; ;;
(logs)
_arguments $(__docker_arguments) \
$opts_help \
"($help)--details[Show extra details provided to logs]" \
"($help -f --follow)"{-f,--follow}"[Follow log output]" \
"($help -s --since)"{-s=,--since=}"[Show logs since this timestamp]:timestamp: " \
"($help -t --timestamps)"{-t,--timestamps}"[Show timestamps]" \
"($help)--tail=[Output the last K lines]:lines:(1 10 20 50 all)" \
"($help -)*:containers:__docker_containers" && ret=0
;;
(network) (network)
local curcontext="$curcontext" state local curcontext="$curcontext" state
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
...@@ -1829,11 +2537,6 @@ __docker_subcommand() { ...@@ -1829,11 +2537,6 @@ __docker_subcommand() {
;; ;;
esac esac
;; ;;
(pause|unpause)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)*:containers:__docker_runningcontainers" && ret=0
;;
(plugin) (plugin)
local curcontext="$curcontext" state local curcontext="$curcontext" state
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
...@@ -1851,128 +2554,13 @@ __docker_subcommand() { ...@@ -1851,128 +2554,13 @@ __docker_subcommand() {
;; ;;
esac esac
;; ;;
(port)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)1:containers:__docker_runningcontainers" \
"($help -)2:port:_ports" && ret=0
;;
(ps) (ps)
_arguments $(__docker_arguments) \ words[1]='ls'
$opts_help \ __docker_container_subcommand && ret=0
"($help -a --all)"{-a,--all}"[Show all containers]" \
"($help)--before=[Show only container created before...]:containers:__docker_containers" \
"($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_ps_filters" \
"($help)--format=[Pretty-print containers using a Go template]:template: " \
"($help -l --latest)"{-l,--latest}"[Show only the latest created container]" \
"($help -n --last)"{-n=,--last=}"[Show n last created containers (includes all states)]:n:(1 5 10 25 50)" \
"($help)--no-trunc[Do not truncate output]" \
"($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \
"($help -s --size)"{-s,--size}"[Display total file sizes]" \
"($help)--since=[Show only containers created since...]:containers:__docker_containers" && ret=0
;;
(pull)
_arguments $(__docker_arguments) \
$opts_help \
"($help -a --all-tags)"{-a,--all-tags}"[Download all tagged images]" \
"($help)--disable-content-trust[Skip image verification]" \
"($help -):name:__docker_search" && ret=0
;;
(push)
_arguments $(__docker_arguments) \
$opts_help \
"($help)--disable-content-trust[Skip image signing]" \
"($help -): :__docker_images" && ret=0
;;
(rename)
_arguments $(__docker_arguments) \
$opts_help \
"($help -):old name:__docker_containers" \
"($help -):new name: " && ret=0
;;
(stop)
_arguments $(__docker_arguments) \
$opts_help \
"($help -t --time)"{-t=,--time=}"[Number of seconds to try to stop for before killing the container]:seconds to before killing:(1 5 10 30 60)" \
"($help -)*:containers:__docker_runningcontainers" && ret=0
;;
(restart)
_arguments $(__docker_arguments) \
$opts_help \
"($help -t --time)"{-t=,--time=}"[Number of seconds to try to stop for before killing the container]:seconds to before killing:(1 5 10 30 60)" \
"($help -)*:containers:__docker_containers_ids" && ret=0
;;
(rm)
_arguments $(__docker_arguments) \
$opts_help \
"($help -f --force)"{-f,--force}"[Force removal]" \
"($help -l --link)"{-l,--link}"[Remove the specified link and not the underlying container]" \
"($help -v --volumes)"{-v,--volumes}"[Remove the volumes associated to the container]" \
"($help -)*:containers:->values" && ret=0
case $state in
(values)
if [[ ${words[(r)-f]} == -f || ${words[(r)--force]} == --force ]]; then
__docker_containers && ret=0
else
__docker_stoppedcontainers && ret=0
fi
;;
esac
;; ;;
(rmi) (rmi)
_arguments $(__docker_arguments) \ words[1]='rm'
$opts_help \ __docker_image_subcommand && ret=0
"($help -f --force)"{-f,--force}"[Force removal]" \
"($help)--no-prune[Do not delete untagged parents]" \
"($help -)*: :__docker_images" && ret=0
;;
(run)
_arguments $(__docker_arguments) \
$opts_help \
$opts_build_create_run \
$opts_build_create_run_update \
$opts_create_run \
$opts_create_run_update \
$opts_attach_exec_run_start \
"($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \
"($help)--health-cmd=[Command to run to check health]:command: " \
"($help)--health-interval=[Time between running the check]:time: " \
"($help)--health-retries=[Consecutive failures needed to report unhealthy]:retries:(1 2 3 4 5)" \
"($help)--health-timeout=[Maximum time to allow one check to run]:time: " \
"($help)--no-healthcheck[Disable any container-specified HEALTHCHECK]" \
"($help)--rm[Remove intermediate containers when it exits]" \
"($help)--runtime=[Name of the runtime to be used for that container]:runtime:__docker_complete_runtimes" \
"($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \
"($help)--stop-signal=[Signal to kill a container]:signal:_signals" \
"($help)--storage-opt=[Storage driver options for the container]:storage options:->storage-opt" \
"($help -): :__docker_images" \
"($help -):command: _command_names -e" \
"($help -)*::arguments: _normal" && ret=0
case $state in
(link)
if compset -P "*:"; then
_wanted alias expl "Alias" compadd -E "" && ret=0
else
__docker_runningcontainers -qS ":" && ret=0
fi
;;
(storage-opt)
if compset -P "*="; then
_message "value" && ret=0
else
opts=('size')
_describe -t filter-opts "storage options" opts -qS "=" && ret=0
fi
;;
esac
;;
(save)
_arguments $(__docker_arguments) \
$opts_help \
"($help -o --output)"{-o=,--output=}"[Write to file]:file:_files" \
"($help -)*: :__docker_images" && ret=0
;; ;;
(search) (search)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
...@@ -1988,7 +2576,7 @@ __docker_subcommand() { ...@@ -1988,7 +2576,7 @@ __docker_subcommand() {
;; ;;
esac esac
;; ;;
(service) (secret)
local curcontext="$curcontext" state local curcontext="$curcontext" state
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
...@@ -1997,29 +2585,47 @@ __docker_subcommand() { ...@@ -1997,29 +2585,47 @@ __docker_subcommand() {
case $state in case $state in
(command) (command)
__docker_service_commands && ret=0 __docker_secret_commands && ret=0
;; ;;
(option-or-argument) (option-or-argument)
curcontext=${curcontext%:*:*}:docker-${words[-1]}: curcontext=${curcontext%:*:*}:docker-${words[-1]}:
__docker_service_subcommand && ret=0 __docker_secret_subcommand && ret=0
;; ;;
esac esac
;; ;;
(start) (service)
local curcontext="$curcontext" state
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
$opts_attach_exec_run_start \ "($help -): :->command" \
"($help -a --attach)"{-a,--attach}"[Attach container's stdout/stderr and forward all signals]" \ "($help -)*:: :->option-or-argument" && ret=0
"($help -i --interactive)"{-i,--interactive}"[Attach container's stding]" \
"($help -)*:containers:__docker_stoppedcontainers" && ret=0 case $state in
(command)
__docker_service_commands && ret=0
;;
(option-or-argument)
curcontext=${curcontext%:*:*}:docker-${words[-1]}:
__docker_service_subcommand && ret=0
;;
esac
;; ;;
(stats) (stack)
local curcontext="$curcontext" state
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -a --all)"{-a,--all}"[Show all containers (default shows just running)]" \ "($help -): :->command" \
"($help)--format=[Pretty-print images using a Go template]:template: " \ "($help -)*:: :->option-or-argument" && ret=0
"($help)--no-stream[Disable streaming stats and only pull the first result]" \
"($help -)*:containers:__docker_runningcontainers" && ret=0 case $state in
(command)
__docker_stack_commands && ret=0
;;
(option-or-argument)
curcontext=${curcontext%:*:*}:docker-${words[-1]}:
__docker_stack_subcommand && ret=0
;;
esac
;; ;;
(swarm) (swarm)
local curcontext="$curcontext" state local curcontext="$curcontext" state
...@@ -2038,40 +2644,27 @@ __docker_subcommand() { ...@@ -2038,40 +2644,27 @@ __docker_subcommand() {
;; ;;
esac esac
;; ;;
(tag) (system)
_arguments $(__docker_arguments) \ local curcontext="$curcontext" state
$opts_help \
"($help -):source:__docker_images"\
"($help -):destination:__docker_repositories_with_tags" && ret=0
;;
(top)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
"($help -)1:containers:__docker_runningcontainers" \ "($help -): :->command" \
"($help -)*:: :->ps-arguments" && ret=0 "($help -)*:: :->option-or-argument" && ret=0
case $state in case $state in
(ps-arguments) (command)
_ps && ret=0 __docker_system_commands && ret=0
;;
(option-or-argument)
curcontext=${curcontext%:*:*}:docker-${words[-1]}:
__docker_system_subcommand && ret=0
;; ;;
esac esac
;; ;;
(update) (version)
_arguments $(__docker_arguments) \ _arguments $(__docker_arguments) \
$opts_help \ $opts_help \
$opts_create_run_update \ "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " && ret=0
$opts_build_create_run_update \
"($help -)*: :->values" && ret=0
case $state in
(values)
if [[ ${words[(r)--kernel-memory*]} = (--kernel-memory*) ]]; then
__docker_stoppedcontainers && ret=0
else
__docker_containers && ret=0
fi
;;
esac
;; ;;
(volume) (volume)
local curcontext="$curcontext" state local curcontext="$curcontext" state
...@@ -2090,11 +2683,6 @@ __docker_subcommand() { ...@@ -2090,11 +2683,6 @@ __docker_subcommand() {
;; ;;
esac esac
;; ;;
(wait)
_arguments $(__docker_arguments) \
$opts_help \
"($help -)*:containers:__docker_runningcontainers" && ret=0
;;
(help) (help)
_arguments $(__docker_arguments) ":subcommand:__docker_commands" && ret=0 _arguments $(__docker_arguments) ":subcommand:__docker_commands" && ret=0
;; ;;
......
# dotenv
Automatically load your project ENV variables from `.env` file when you `cd` into project root directory.
Storing configuration in the environment is one of the tenets of a [twelve-factor app](http://www.12factor.net). Anything that is likely to change between deployment environments–such as resource handles for databases or credentials for external services–should be extracted from the code into environment variables.
## Installation
Just add the plugin to your `.zshrc`:
```sh
plugins=(git man dotenv)
```
## Usage
Create `.env` file inside your project directory and put your local ENV variables there.
For example:
```sh
export AWS_S3_TOKEN=d84a83539134f28f412c652b09f9f98eff96c9a
export SECRET_KEY=7c6c72d959416d5aa368a409362ec6e2ac90d7f
export MONGO_URI=mongodb://127.0.0.1:27017
export PORT=3001
```
`export` is optional. This format works as well:
```sh
AWS_S3_TOKEN=d84a83539134f28f412c652b09f9f98eff96c9a
SECRET_KEY=7c6c72d959416d5aa368a409362ec6e2ac90d7f
MONGO_URI=mongodb://127.0.0.1:27017
PORT=3001
```
**It's strongly recommended to add `.env` file to `.gitignore`**, because usually it contains sensitive information such as your credentials, secret keys, passwords etc. You don't want to commit this file, it supposed to be local only.
#!/bin/zsh
source_env() {
if [[ -f .env ]]; then
source .env
fi
}
autoload -U add-zsh-hook
add-zsh-hook chpwd source_env
# droplr # droplr
Use [Droplr](https://droplr.com/) from the comand line to upload files and shorten Use [Droplr](https://droplr.com/) from the command line to upload files and shorten
links. It needs to have [Droplr.app](https://droplr.com/apps) installed and logged links. It needs to have [Droplr.app](https://droplr.com/apps) installed and logged
in. MacOS only. in. MacOS only.
......
...@@ -43,6 +43,7 @@ alias g='git' ...@@ -43,6 +43,7 @@ alias g='git'
alias ga='git add' alias ga='git add'
alias gaa='git add --all' alias gaa='git add --all'
alias gapa='git add --patch' alias gapa='git add --patch'
alias gau='git add --update'
alias gb='git branch' alias gb='git branch'
alias gba='git branch -a' alias gba='git branch -a'
......
...@@ -52,7 +52,7 @@ if [[ -x "${commands[gwhoami]}" ]]; then ...@@ -52,7 +52,7 @@ if [[ -x "${commands[gwhoami]}" ]]; then
# #
# This method is inflexible since the aliases are at risk of being # This method is inflexible since the aliases are at risk of being
# overriden resulting in the BSD coreutils being called. # overridden resulting in the BSD coreutils being called.
# #
# (( ${+commands[$gcmd]} )) && \ # (( ${+commands[$gcmd]} )) && \
# alias "$gcmd[2,-1]"="${prefix}/${gcmd//"["/"\\["}" # alias "$gcmd[2,-1]"="${prefix}/${gcmd//"["/"\\["}"
......
...@@ -24,29 +24,60 @@ function _gradle_core_commands() { ...@@ -24,29 +24,60 @@ function _gradle_core_commands() {
function _gradle_arguments() { function _gradle_arguments() {
_arguments -C \ _arguments -C \
'-a[Do not rebuild project dependencies]' \ '-a[Do not rebuild project dependencies]' \
'-h[Help]' \ '-b[Specifies the build file]' \
'-D[System property]' \ '-c[Specifies the settings file]' \
'-d[Log at the debug level]' \ '-d[Log at the debug level]' \
'--gui[Launches the Gradle GUI app]' \ '-g[Specifies the Gradle user home directory]' \
'--stop[Stop the Gradle daemon]' \ '-h[Shows a help message]' \
'--daemon[Use the Gradle daemon]' \ '-i[Set log level to INFO]' \
'--no-daemon[Do not use the Gradle daemon]' \ '-m[Runs the build with all task actions disabled]' \
'--rerun-task [Specifies that any task optimization is ignored.]' \ '-p[Specifies the start directory for Gradle]' \
'-i[Log at the info level]' \ '-q[Log errors only]' \
'-m[Dry run]' \ '-s[Print out the stacktrace also for user exceptions]' \
'-P[Set a project property]' \ '-t[Continuous mode. Automatically re-run build after changes]' \
'-p[Specifies the start directory]' \ '-u[Don''t search in parent directories for a settings.gradle file]' \
'--profile[Profile the build time]' \ '-v[Prints Gradle version info]' \
'-q[Log at the quiet level (only show errors)]' \
'-v[Print the Gradle version info]' \
'-x[Specify a task to be excluded]' \ '-x[Specify a task to be excluded]' \
'-b[Specifies the build file.]' \ '-D[Set a system property]' \
'-c[Specifies the settings file.]' \ '-I[Specifies an initialization script]' \
'--continue[Continues task execution after a task failure.]' \ '-P[Sets a project property of the root project]' \
'-g[Specifies the Gradle user home directory.]' \ '-S[Print out the full (very verbose) stacktrace]' \
'-I[Specifies an initialization script.]' \ '--build-file[Specifies the build file]' \
'--refresh-dependencies[Refresh the state of dependencies.]' \ '--configure-on-demand[Only relevant projects are configured]' \
'-u[Don''t search in parent directories for a settings.gradle file.]' \ '--console[Type of console output to generate (plain, auto, or rich)]' \
'--continue[Continues task execution after a task failure]' \
'--continuous[Continuous mode. Automatically re-run build after changes]' \
'--daemon[Use the Gradle Daemon]' \
'--debug[Log at the debug level]' \
'--dry-run[Runs the build with all task actions disabled]' \
'--exclude-task[Specify a task to be excluded]' \
'--full-stacktrace[Print out the full (very verbose) stacktrace]' \
'--gradle-user-home[Specifies the Gradle user home directory]' \
'--gui[Launches the Gradle GUI app (Deprecated)]' \
'--help[Shows a help message]' \
'--include-build[Run the build as a composite, including the specified build]' \
'--info[Set log level to INFO]' \
'--init-script[Specifies an initialization script]' \
'--max-workers[Set the maximum number of workers that Gradle may use]' \
'--no-daemon[Do not use the Gradle Daemon]' \
'--no-rebuild[Do not rebuild project dependencies]' \
'--no-search-upwards[Don''t search in parent directories for a settings.gradle file]' \
'--offline[Build without accessing network resources]' \
'--parallel[Build projects in parallel]' \
'--profile[Profile build time and create report]' \
'--project-cache-dir[Specifies the project-specific cache directory]' \
'--project-dir[Specifies the start directory for Gradle]' \
'--project-prop[Sets a project property of the root project]' \
'--quiet[Log errors only]' \
'--recompile-scripts[Forces scripts to be recompiled, bypassing caching]' \
'--refresh-dependencies[Refresh the state of dependencies]' \
'--rerun-task[Specifies that any task optimization is ignored]' \
'--settings-file[Specifies the settings file]' \
'--stacktrace[Print out the stacktrace also for user exceptions]' \
'--status[Print Gradle Daemon status]' \
'--stop[Stop all Gradle Daemons]' \
'--system-prop[Set a system property]' \
'--version[Prints Gradle version info]' \
'*::command:->command' \ '*::command:->command' \
&& return 0 && return 0
} }
...@@ -61,7 +92,7 @@ _gradle_does_task_list_need_generating () { ...@@ -61,7 +92,7 @@ _gradle_does_task_list_need_generating () {
} }
############## ##############
# Parse the tasks from `gradle(w) tasks --all` into .gradletasknamecache # Parse the tasks from `gradle(w) tasks --all` and return them to the calling function.
# All lines in the output from gradle(w) that are between /^-+$/ and /^\s*$/ # All lines in the output from gradle(w) that are between /^-+$/ and /^\s*$/
# are considered to be tasks. If and when gradle adds support for listing tasks # are considered to be tasks. If and when gradle adds support for listing tasks
# for programmatic parsing, this method can be deprecated. # for programmatic parsing, this method can be deprecated.
...@@ -76,7 +107,7 @@ _gradle_parse_tasks () { ...@@ -76,7 +107,7 @@ _gradle_parse_tasks () {
task_name_buffer="" task_name_buffer=""
elif [[ $line =~ ^\s*$ ]]; then elif [[ $line =~ ^\s*$ ]]; then
if [[ "$lines_might_be_tasks" = true ]]; then if [[ "$lines_might_be_tasks" = true ]]; then
# If a newline is found, send the buffer to .gradletasknamecache # If a newline is found, echo the buffer to the calling function
while read -r task; do while read -r task; do
echo $task | awk '/[a-zA-Z0-9:-]+/ {print $1}' echo $task | awk '/[a-zA-Z0-9:-]+/ {print $1}'
done <<< "$task_name_buffer" done <<< "$task_name_buffer"
...@@ -90,6 +121,25 @@ _gradle_parse_tasks () { ...@@ -90,6 +121,25 @@ _gradle_parse_tasks () {
done <<< "$1" done <<< "$1"
} }
##############
# Gradle tasks from subprojects are allowed to be executed without specifying
# the subproject; that task will then be called on all subprojects.
# gradle(w) tasks --all only lists tasks per subproject, but when autocompleting
# we often want to be able to run a specific task on all subprojects, e.g.
# "gradle clean".
# This function uses the list of tasks from "gradle tasks --all", and for each
# line grabs everything after the last ":" and combines that output with the original
# output. The combined list is returned as the result of this function.
##############
_gradle_parse_and_extract_tasks () {
# All tasks
tasks=$(_gradle_parse_tasks "$1")
# Task name without sub project(s) prefix
simple_tasks=$(echo $tasks | awk 'BEGIN { FS = ":" } { print $NF }')
echo "$tasks\n$simple_tasks"
}
############################################################################## ##############################################################################
# Discover the gradle tasks by running "gradle tasks --all" # Discover the gradle tasks by running "gradle tasks --all"
############################################################################ ############################################################################
...@@ -97,7 +147,7 @@ _gradle_tasks () { ...@@ -97,7 +147,7 @@ _gradle_tasks () {
if [[ -f build.gradle ]]; then if [[ -f build.gradle ]]; then
_gradle_arguments _gradle_arguments
if _gradle_does_task_list_need_generating; then if _gradle_does_task_list_need_generating; then
_gradle_parse_tasks "$(gradle tasks --all)" > .gradletasknamecache _gradle_parse_and_extract_tasks "$(gradle tasks --all)" > .gradletasknamecache
fi fi
compadd -X "==== Gradle Tasks ====" $(cat .gradletasknamecache) compadd -X "==== Gradle Tasks ====" $(cat .gradletasknamecache)
fi fi
...@@ -107,7 +157,7 @@ _gradlew_tasks () { ...@@ -107,7 +157,7 @@ _gradlew_tasks () {
if [[ -f build.gradle ]]; then if [[ -f build.gradle ]]; then
_gradle_arguments _gradle_arguments
if _gradle_does_task_list_need_generating; then if _gradle_does_task_list_need_generating; then
_gradle_parse_tasks "$(./gradlew tasks --all)" > .gradletasknamecache _gradle_parse_and_extract_tasks "$(./gradlew tasks --all)" > .gradletasknamecache
fi fi
compadd -X "==== Gradlew Tasks ====" $(cat .gradletasknamecache) compadd -X "==== Gradlew Tasks ====" $(cat .gradletasknamecache)
fi fi
......
...@@ -31,6 +31,10 @@ _1st_arguments=( ...@@ -31,6 +31,10 @@ _1st_arguments=(
"domains\:add":"add a custom domain to an app" "domains\:add":"add a custom domain to an app"
"domains\:remove":"remove a custom domain from an app" "domains\:remove":"remove a custom domain from an app"
"domains\:clear":"remove all custom domains from an app" "domains\:clear":"remove all custom domains from an app"
"features":"list available app features"
"features\:disable":"disables a feature"
"features\:enable":"enables an feature"
"features\:info":"displays additional information about feature"
"help":"list available commands or display help for a specific command" "help":"list available commands or display help for a specific command"
"keys":"display keys for the current user" "keys":"display keys for the current user"
"keys\:add":"add a key for the current user" "keys\:add":"add a key for the current user"
...@@ -144,5 +148,4 @@ _arguments \ ...@@ -144,5 +148,4 @@ _arguments \
'(--app)--app[the app name]' \ '(--app)--app[the app name]' \
'(--remote)--remote[the remote name]' \ '(--remote)--remote[the remote name]' \
'(--help)--help[help about the current command]' \ '(--help)--help[help about the current command]' \
&& return 0 && return 0
...@@ -244,7 +244,7 @@ _history-substring-search-end() { ...@@ -244,7 +244,7 @@ _history-substring-search-end() {
_history_substring_search_result=$BUFFER _history_substring_search_result=$BUFFER
# the search was succesful so display the result properly by clearing away # the search was successful so display the result properly by clearing away
# existing highlights and moving the cursor to the end of the result buffer # existing highlights and moving the cursor to the end of the result buffer
if [[ $_history_substring_search_refresh_display -eq 1 ]]; then if [[ $_history_substring_search_refresh_display -eq 1 ]]; then
region_highlight=() region_highlight=()
......
...@@ -86,6 +86,9 @@ case $state in ...@@ -86,6 +86,9 @@ case $state in
(test) (test)
_files _files
;; ;;
(run)
_files
;;
esac esac
;; ;;
esac esac
...@@ -20,10 +20,9 @@ BACKGROUND_CYAN=`tput setab 6` ...@@ -20,10 +20,9 @@ BACKGROUND_CYAN=`tput setab 6`
BACKGROUND_WHITE=`tput setab 7` BACKGROUND_WHITE=`tput setab 7`
RESET_FORMATTING=`tput sgr0` RESET_FORMATTING=`tput sgr0`
# Wrapper function for Maven's mvn command. # Wrapper function for Maven's mvn command.
mvn-color() mvn-color() {
{
( (
# Filter mvn output using sed. Before filtering set the locale to C, so invalid characters won't break some sed implementations # Filter mvn output using sed. Before filtering set the locale to C, so invalid characters won't break some sed implementations
unset LANG unset LANG
...@@ -37,7 +36,7 @@ mvn-color() ...@@ -37,7 +36,7 @@ mvn-color()
echo -ne ${RESET_FORMATTING} echo -ne ${RESET_FORMATTING}
) )
} }
# Override the mvn command with the colorized one. # Override the mvn command with the colorized one.
#alias mvn="mvn-color" #alias mvn="mvn-color"
...@@ -65,13 +64,13 @@ alias mvnsrc='mvn dependency:sources' ...@@ -65,13 +64,13 @@ alias mvnsrc='mvn dependency:sources'
alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc' alias mvndocs='mvn dependency:resolve -Dclassifier=javadoc'
function listMavenCompletions { function listMavenCompletions {
reply=( reply=(
# common lifecycle # common lifecycle
clean process-resources compile process-test-resources test-compile test integration-test package verify install deploy site clean process-resources compile process-test-resources test-compile test integration-test package verify install deploy site
# common plugins # common plugins
deploy failsafe install site surefire checkstyle javadoc jxr pmd ant antrun archetype assembly dependency enforcer gpg help release repository source eclipse idea jetty cargo jboss tomcat tomcat6 tomcat7 exec versions war ear ejb android scm buildnumber nexus repository sonar license hibernate3 liquibase flyway gwt deploy failsafe install site surefire checkstyle javadoc jxr pmd ant antrun archetype assembly dependency enforcer gpg help release repository source eclipse idea jetty cargo jboss tomcat tomcat6 tomcat7 exec versions war ear ejb android scm buildnumber nexus repository sonar license hibernate3 liquibase flyway gwt
# deploy # deploy
deploy:deploy-file deploy:deploy-file
# failsafe # failsafe
...@@ -82,7 +81,7 @@ function listMavenCompletions { ...@@ -82,7 +81,7 @@ function listMavenCompletions {
site:site site:deploy site:run site:stage site:stage-deploy site:site site:deploy site:run site:stage site:stage-deploy
# surefire # surefire
surefire:test surefire:test
# checkstyle # checkstyle
checkstyle:checkstyle checkstyle:check checkstyle:checkstyle checkstyle:check
# javadoc # javadoc
...@@ -110,18 +109,18 @@ function listMavenCompletions { ...@@ -110,18 +109,18 @@ function listMavenCompletions {
help:active-profiles help:all-profiles help:describe help:effective-pom help:effective-settings help:evaluate help:expressions help:system help:active-profiles help:all-profiles help:describe help:effective-pom help:effective-settings help:evaluate help:expressions help:system
# release # release
release:clean release:prepare release:rollback release:perform release:stage release:branch release:update-versions release:clean release:prepare release:rollback release:perform release:stage release:branch release:update-versions
# jgitflow # jgitflow
jgitflow:feature-start jgitflow:feature-finish jgitflow:release-start jgitflow:release-finish jgitflow:hotfix-start jgitflow:hotfix-finish jgitflow:build-number jgitflow:feature-start jgitflow:feature-finish jgitflow:release-start jgitflow:release-finish jgitflow:hotfix-start jgitflow:hotfix-finish jgitflow:build-number
# repository # repository
repository:bundle-create repository:bundle-pack repository:bundle-create repository:bundle-pack
# source # source
source:aggregate source:jar source:jar-no-fork source:aggregate source:jar source:jar-no-fork
# eclipse # eclipse
eclipse:clean eclipse:eclipse eclipse:clean eclipse:eclipse
# idea # idea
idea:clean idea:idea idea:clean idea:idea
# jetty # jetty
jetty:run jetty:run-exploded jetty:run jetty:run-exploded
# cargo # cargo
...@@ -134,7 +133,7 @@ function listMavenCompletions { ...@@ -134,7 +133,7 @@ function listMavenCompletions {
tomcat6:run tomcat6:run-war tomcat6:run-war-only tomcat6:stop tomcat6:deploy tomcat6:undeploy tomcat6:run tomcat6:run-war tomcat6:run-war-only tomcat6:stop tomcat6:deploy tomcat6:undeploy
# tomcat7 # tomcat7
tomcat7:run tomcat7:run-war tomcat7:run-war-only tomcat7:deploy tomcat7:run tomcat7:run-war tomcat7:run-war-only tomcat7:deploy
# tomee # tomee
tomee:run tomee:run-war tomee:run-war-only tomee:stop tomee:deploy tomee:undeploy tomee:run tomee:run-war tomee:run-war-only tomee:stop tomee:deploy tomee:undeploy
# spring-boot # spring-boot
spring-boot:run spring-boot:repackage spring-boot:run spring-boot:repackage
...@@ -172,7 +171,8 @@ function listMavenCompletions { ...@@ -172,7 +171,8 @@ function listMavenCompletions {
flyway:clean flyway:history flyway:init flyway:migrate flyway:status flyway:validate flyway:clean flyway:history flyway:init flyway:migrate flyway:status flyway:validate
# gwt # gwt
gwt:browser gwt:clean gwt:compile gwt:compile-report gwt:css gwt:debug gwt:eclipse gwt:eclipseTest gwt:generateAsync gwt:help gwt:i18n gwt:mergewebxml gwt:resources gwt:run gwt:sdkInstall gwt:source-jar gwt:soyc gwt:test gwt:browser gwt:clean gwt:compile gwt:compile-report gwt:css gwt:debug gwt:eclipse gwt:eclipseTest gwt:generateAsync gwt:help gwt:i18n gwt:mergewebxml gwt:resources gwt:run gwt:sdkInstall gwt:source-jar gwt:soyc gwt:test
# asciidoctor
asciidoctor:process-asciidoc asciidoctor:auto-refresh asciidoctor:http asciidoctor:zip
# options # options
-Dmaven.test.skip=true -DskipTests -DskipITs -Dmaven.surefire.debug -DenableCiProfile -Dpmd.skip=true -Dcheckstyle.skip=true -Dtycho.mode=maven -Dmaven.test.failure.ignore=true -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile= -Dmaven.test.skip=true -DskipTests -DskipITs -Dmaven.surefire.debug -DenableCiProfile -Dpmd.skip=true -Dcheckstyle.skip=true -Dtycho.mode=maven -Dmaven.test.failure.ignore=true -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment