|
|
@ -1649,15 +1649,16 @@ _setup_state_dir() { |
|
|
|
trap_add EXIT "rm -rf \"$state_tmpdir\"" |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
## Returns arg list of an docker-compose |
|
|
|
get_docker_compose_opts_list() { |
|
|
|
local cache_file="$state_tmpdir/$FUNCNAME.cache.$(echo "$*" | md5_compat)" |
|
|
|
local cache_file="$CACHEDIR/$FUNCNAME.cache.$(cat "$(which docker-compose)" | md5_compat)" |
|
|
|
if [ -e "$cache_file" ]; then |
|
|
|
debug "$FUNCNAME: cache hit ($*)" |
|
|
|
# debug "$FUNCNAME: cache hit ($*)" |
|
|
|
cat "$cache_file" |
|
|
|
return 0 |
|
|
|
fi |
|
|
|
docker-compose "$@" --help | grep '^Options:' -A 20000 | |
|
|
|
docker_compose_help_msg=$(docker-compose "$@" --help 2>/dev/null) || return 1 |
|
|
|
echo "$docker_compose_help_msg" | grep '^Options:' -A 20000 | |
|
|
|
tail -n +2 | |
|
|
|
egrep "^\s+-" | |
|
|
|
sed -r 's/\s+((((-[a-zA-Z]|--[a-zA-Z0-9-]+)( [A-Z=]+|=[^ ]+)?)(, )?)+)\s+.*$/\1/g' | |
|
|
@ -1668,14 +1669,14 @@ _MULTIOPTION_REGEX='^((-[a-zA-Z]|--[a-zA-Z0-9-]+)(, )?)+' |
|
|
|
_MULTIOPTION_REGEX_LINE_FILTER=$_MULTIOPTION_REGEX'(\s|=)' |
|
|
|
|
|
|
|
get_docker_compose_multi_opts_list() { |
|
|
|
opts_list=$(get_docker_compose_opts_list "$@") |
|
|
|
opts_list=$(get_docker_compose_opts_list "$@") || return 1 |
|
|
|
echo "$opts_list" | egrep "$_MULTIOPTION_REGEX_LINE_FILTER" | |
|
|
|
sed -r "s/^($_MULTIOPTION_REGEX)(\s|=).*$/\1/g" | |
|
|
|
tr ',' "\n" | xargs echo |
|
|
|
} |
|
|
|
|
|
|
|
get_docker_compose_single_opts_list() { |
|
|
|
opts_list=$(get_docker_compose_opts_list "$@") |
|
|
|
opts_list=$(get_docker_compose_opts_list "$@") || return 1 |
|
|
|
echo "$opts_list" | egrep -v "$_MULTIOPTION_REGEX_LINE_FILTER" | |
|
|
|
tr ',' "\n" | xargs echo |
|
|
|
} |
|
|
@ -1691,6 +1692,15 @@ clean_cache() { |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
str_matches() { |
|
|
|
local str="$1" |
|
|
|
shift |
|
|
|
for pattern in "$@"; do |
|
|
|
eval "[[ \"$str\" == $pattern ]]" && return 0 |
|
|
|
done |
|
|
|
return 1 |
|
|
|
} |
|
|
|
|
|
|
|
[ "$SOURCED" ] && return 0 |
|
|
|
|
|
|
|
|
|
|
@ -1722,8 +1732,9 @@ no_hooks= |
|
|
|
no_init= |
|
|
|
action= |
|
|
|
stage="main" ## switches from 'main', to 'action', 'remainder' |
|
|
|
# DC_MATCH_MULTI= |
|
|
|
# DC_MATCH_SINGLE= |
|
|
|
is_docker_compose_action= |
|
|
|
DC_MATCH_MULTI= |
|
|
|
DC_MATCH_SINGLE= |
|
|
|
while [ "$#" != 0 ]; do |
|
|
|
case "$stage" in |
|
|
|
"main") |
|
|
@ -1764,8 +1775,10 @@ while [ "$#" != 0 ]; do |
|
|
|
*) |
|
|
|
action="$1" |
|
|
|
stage="action" |
|
|
|
# DC_MATCH_MULTI=$(get_docker_compose_multi_opts_list "$action") || return 1 |
|
|
|
# DC_MATCH_SINGLE="$(get_docker_compose_single_opts_list "$action") $(echo "$DC_MATCH_MULTI" | sed -r 's/( |$)/=\* /g')" |
|
|
|
|
|
|
|
DC_MATCH_MULTI=$(get_docker_compose_multi_opts_list "$action") && |
|
|
|
DC_MATCH_SINGLE="$(get_docker_compose_single_opts_list "$action") $(echo "$DC_MATCH_MULTI" | sed -r 's/( |$)/=\* /g')" && |
|
|
|
is_docker_compose_action=true |
|
|
|
;; |
|
|
|
esac |
|
|
|
;; |
|
|
@ -1775,12 +1788,19 @@ while [ "$#" != 0 ]; do |
|
|
|
no_init=true ; no_hooks=true ; no_relations=true |
|
|
|
action_opts+=("$1") |
|
|
|
;; |
|
|
|
--verbose|-v) |
|
|
|
export VERBOSE=true |
|
|
|
action_opts+=("$1") |
|
|
|
;; |
|
|
|
--*|-*) |
|
|
|
action_opts+=("$1") |
|
|
|
if [ "$is_docker_compose_action" ]; then |
|
|
|
if str_matches "$1" DC_MATCH_MULTI; then |
|
|
|
action_opts=("$1" "$2") |
|
|
|
shift; |
|
|
|
elif str_matches "$1" DC_MATCH_SINGLE; then |
|
|
|
action_opts=("$1") |
|
|
|
else |
|
|
|
err "Unknown option '$1'. Please check help." |
|
|
|
docker-compose "$action" --help >&2 |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
fi |
|
|
|
;; |
|
|
|
*) |
|
|
|
action_posargs+=("$1") |
|
|
|