069df888b0ec4db1ab06cfebd3e96f74c0413762
- Author
- Marc Cornellà <marc.cornella@live.com>
- Committer
- Marc Cornellà <marc.cornella@live.com>
- Date
Message
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