From 79c3e5b48b905792fe915f1acfd434858b70b2d3 Mon Sep 17 00:00:00 2001 From: Valentin Lab Date: Tue, 4 Dec 2018 10:04:59 +0100 Subject: [PATCH] new: better help message with charm actions listed as commands --- bin/compose-core | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/bin/compose-core b/bin/compose-core index 648f689..9a995f2 100755 --- a/bin/compose-core +++ b/bin/compose-core @@ -2650,6 +2650,43 @@ get_docker_compose_single_opts_list() { echo "$opts_list" | single_opts_filter } +display_commands_help() { + local charm_actions + echo + echo "${WHITE}Commands${NORMAL} (thanks to docker-compose):" + get_docker_compose_commands_help | sed -r "s/ ([a-z]+)(\s+)/ ${DARKCYAN}\1${NORMAL}\2/g" + charm_actions_help=$(get_docker_charm_action_help) || return 1 + if [ "$charm_actions_help" ]; then + echo + echo "${WHITE}Charm actions${NORMAL}:" + printf "%s\n" "$charm_actions_help" | \ + sed -r "s/^ ([a-z0-9-]+)(\s+)([a-z0-9-]+)(\s+)/ ${DARKCYAN}\1${NORMAL}\2${DARKYELLOW}\3${NORMAL}\4/g" + fi +} + +get_docker_charm_action_help() { + local services service charm relation_name target_service relation_config \ + target_charm + services=($(get_compose_yml_content | shyaml keys 2>/dev/null)) + for service in "${services[@]}"; do + out=$( + charm=$(get_service_charm "$service") || return 1 + for action in $(charm.ls_direct_actions "$charm"); do + printf " %-28s %s\n" "$action $service" "Direct action from ${DARKPINK}$charm${NORMAL}" + done + while read-0 relation_name target_service _relation_config _tech_dep; do + target_charm=$(get_service_charm "$target_service") || return 1 + for action in $(charm.ls_relation_actions "$target_charm" "$relation_name"); do + printf " %-28s %s\n" "$action $service" "Indirect action from ${DARKPINK}$target_charm${NORMAL}" + done + done < <(get_compose_relations "$service") + ) + if [ "$out" ]; then + echo " for ${DARKYELLOW}$service${NORMAL}:" + printf "%s\n" "$out" + fi + done +} display_help() { print_help @@ -2671,9 +2708,7 @@ display_help() { get_docker_compose_opts_help | remove_options_in_option_help_msg --version --help --verbose | filter_docker_compose_help_message - echo - echo "${WHITE}Commands${NORMAL} (thanks to docker-compose):" - get_docker_compose_commands_help | sed -r "s/ ([a-z]+)(\s+)/ ${DARKCYAN}\1${NORMAL}\2/g" + display_commands_help } @@ -3082,6 +3117,11 @@ charm.sanity_checks || die "Sanity checks about charm-store failed. Please corre if [ -z "$is_docker_compose_action" -a "$action" ]; then action_service=${remainder_args[0]} + if [ -z "$action_service" ]; then + err "No such command or action: ${DARKCYAN}$action${NORMAL}" + display_commands_help + exit 1 + fi remainder_args=("${remainder_args[@]:1}") if has_service_action "$action_service" "$action" >/dev/null; then is_service_action=true