069df888b0ec4db1ab06cfebd3e96f74c0413762

Author
Marc Cornellà <marc.cornella@live.com>
Committer
Marc Cornellà <marc.cornella@live.com>
Date

Message

docker-compose: update completion (1f97a57, 2019-03-02)

Fixes #7480

Diff

This diff is truncated to protect this page.

  1diff --git a/plugins/docker-compose/_docker-compose b/plugins/docker-compose/_docker-compose
  2index c0a54cced1bf37b431d69001c7fb869de00debb8..808b068a31410f8a9b3f3d70050bff27c9dc64c4 100644
  3--- a/plugins/docker-compose/_docker-compose
  4+++ b/plugins/docker-compose/_docker-compose
  5@@ -23,7 +23,7 @@ __docker-compose_all_services_in_compose_file() {
  6     local already_selected
  7     local -a services
  8     already_selected=$(echo $words | tr " " "|")
  9-    __docker-compose_q config --services \
 10+    __docker-compose_q ps --services "$@" \
 11         | grep -Ev "^(${already_selected})$"
 12 }
 13 
 14@@ -31,125 +31,42 @@ __docker-compose_all_services_in_compose_file() {
 15 __docker-compose_services_all() {
 16     [[ $PREFIX = -* ]] && return 1
 17     integer ret=1
 18-    services=$(__docker-compose_all_services_in_compose_file)
 19+    services=$(__docker-compose_all_services_in_compose_file "$@")
 20     _alternative "args:services:($services)" && ret=0
 21 
 22     return ret
 23 }
 24 
 25-# All services that have an entry with the given key in their docker-compose.yml section
 26-__docker-compose_services_with_key() {
 27-    local already_selected
 28-    local -a buildable
 29-    already_selected=$(echo $words | tr " " "|")
 30-    # flatten sections to one line, then filter lines containing the key and return section name.
 31-    __docker-compose_q config \
 32-        | sed -n -e '/^services:/,/^[^ ]/p' \
 33-        | sed -n 's/^  //p' \
 34-        | awk '/^[a-zA-Z0-9]/{printf "\n"};{printf $0;next;}' \
 35-        | grep " \+$1:" \
 36-        | cut -d: -f1 \
 37-        | grep -Ev "^(${already_selected})$"
 38-}
 39-
 40 # All services that are defined by a Dockerfile reference
 41 __docker-compose_services_from_build() {
 42     [[ $PREFIX = -* ]] && return 1
 43-    integer ret=1
 44-    buildable=$(__docker-compose_services_with_key build)
 45-    _alternative "args:buildable services:($buildable)" && ret=0
 46-
 47-   return ret
 48+    __docker-compose_services_all --filter source=build
 49 }
 50 
 51 # All services that are defined by an image
 52 __docker-compose_services_from_image() {
 53     [[ $PREFIX = -* ]] && return 1
 54-    integer ret=1
 55-    pullable=$(__docker-compose_services_with_key image)
 56-    _alternative "args:pullable services:($pullable)" && ret=0
 57-
 58-    return ret
 59-}
 60-
 61-__docker-compose_get_services() {
 62-    [[ $PREFIX = -* ]] && return 1
 63-    integer ret=1
 64-    local kind
 65-    declare -a running paused stopped lines args services
 66-
 67-    docker_status=$(docker ps > /dev/null 2>&1)
 68-    if [ $? -ne 0 ]; then
 69-        _message "Error! Docker is not running."
 70-        return 1
 71-    fi
 72-
 73-    kind=$1
 74-    shift
 75-    [[ $kind =~ (stopped|all) ]] && args=($args -a)
 76-
 77-    lines=(${(f)"$(_call_program commands docker $docker_options ps $args)"})
 78-    services=(${(f)"$(_call_program commands docker-compose 2>/dev/null $compose_options ps -q)"})
 79-
 80-    # Parse header line to find columns
 81-    local i=1 j=1 k header=${lines[1]}
 82-    declare -A begin end
 83-    while (( j < ${#header} - 1 )); do
 84-        i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
 85-        j=$(( i + ${${header[$i,-1]}[(i)  ]} - 1 ))
 86-        k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
 87-        begin[${header[$i,$((j-1))]}]=$i
 88-        end[${header[$i,$((j-1))]}]=$k
 89-    done
 90-    lines=(${lines[2,-1]})
 91-
 92-    # Container ID
 93-    local line s name
 94-    local -a names
 95-    for line in $lines; do
 96-        if [[ ${services[@]} == *"${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}"* ]]; then
 97-            names=(${(ps:,:)${${line[${begin[NAMES]},-1]}%% *}})
 98-            for name in $names; do
 99-                s="${${name%_*}#*_}:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}"
100-                s="$s, ${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}"
101-                s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}"
102-                if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = Exit* ]]; then
103-                    stopped=($stopped $s)
104-                else