#!/bin/bash # Print a message to stderr and exit # usage: ynh_die --message=MSG [--ret_code=RETCODE] ynh_die() { # Declare an array to define the options of this helper. local legacy_args=mc declare -Ar args_array=( [m]=message= [c]=ret_code= ) local message local ret_code # Manage arguments with getopts ynh_handle_getopts_args "$@" echo "$message" 1>&2 exit "${ret_code:-1}" } # Display a message in the 'INFO' logging category # # usage: ynh_print_info --message="Some message" ynh_print_info() { # Declare an array to define the options of this helper. local legacy_args=m declare -Ar args_array=( [m]=message= ) local message # Manage arguments with getopts ynh_handle_getopts_args "$@" echo "$message" >> "$YNH_STDINFO" } # Ignore the yunohost-cli log to prevent errors with conditional commands # # [internal] # # usage: ynh_no_log COMMAND # # Simply duplicate the log, execute the yunohost command and replace the log without the result of this command # It's a very badly hack... ynh_no_log() { local ynh_cli_log=/var/log/yunohost/yunohost-cli.log sudo cp -a ${ynh_cli_log} ${ynh_cli_log}-move eval $@ local exit_code=$? sudo mv ${ynh_cli_log}-move ${ynh_cli_log} return $? } # Main printer, just in case in the future we have to change anything about that. # # [internal] # ynh_print_log () { echo -e "${1}" } # Print a warning on stderr # # usage: ynh_print_warn --message="Text to print" # | arg: -m, --message - The text to print ynh_print_warn () { # Declare an array to define the options of this helper. local legacy_args=m declare -Ar args_array=( [m]=message= ) local message # Manage arguments with getopts ynh_handle_getopts_args "$@" ynh_print_log "\e[93m\e[1m[WARN]\e[0m ${message}" >&2 } # Print an error on stderr # # usage: ynh_print_err --message="Text to print" # | arg: -m, --message - The text to print ynh_print_err () { # Declare an array to define the options of this helper. local legacy_args=m declare -Ar args_array=( [m]=message= ) local message # Manage arguments with getopts ynh_handle_getopts_args "$@" ynh_print_log "\e[91m\e[1m[ERR]\e[0m ${message}" >&2 } # Execute a command and print the result as an error # # usage: ynh_exec_err command to execute # usage: ynh_exec_err "command to execute | following command" # In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. # # | arg: command - command to execute ynh_exec_err () { ynh_print_err "$(eval $@)" } # Execute a command and print the result as a warning # # usage: ynh_exec_warn command to execute # usage: ynh_exec_warn "command to execute | following command" # In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. # # | arg: command - command to execute ynh_exec_warn () { ynh_print_warn "$(eval $@)" } # Execute a command and force the result to be printed on stdout # # usage: ynh_exec_warn_less command to execute # usage: ynh_exec_warn_less "command to execute | following command" # In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. # # | arg: command - command to execute ynh_exec_warn_less () { eval $@ 2>&1 } # Execute a command and redirect stdout in /dev/null # # usage: ynh_exec_quiet command to execute # usage: ynh_exec_quiet "command to execute | following command" # In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. # # | arg: command - command to execute ynh_exec_quiet () { eval $@ > /dev/null } # Execute a command and redirect stdout and stderr in /dev/null # # usage: ynh_exec_fully_quiet command to execute # usage: ynh_exec_fully_quiet "command to execute | following command" # In case of use of pipes, you have to use double quotes. Otherwise, this helper will be executed with the first command, then be sent to the next pipe. # # | arg: command - command to execute ynh_exec_fully_quiet () { eval $@ > /dev/null 2>&1 } # Remove any logs for all the following commands. # # usage: ynh_print_OFF # WARNING: You should be careful with this helper, and never forget to use ynh_print_ON as soon as possible to restore the logging. ynh_print_OFF () { set +x } # Restore the logging after ynh_print_OFF # # usage: ynh_print_ON ynh_print_ON () { set -x # Print an echo only for the log, to be able to know that ynh_print_ON has been called. echo ynh_print_ON > /dev/null } # Print a message as INFO and show progression during an app script # # usage: ynh_script_progression --message=message [--weight=weight] [--time] # | arg: -m, --message= - The text to print # | arg: -w, --weight= - The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script. # | arg: -t, --time= - Print the execution time since the last call to this helper. Especially usefull to define weights. # | arg: -l, --last= - Use for the last call of the helper, to fill te progression bar. increment_progression=0 previous_weight=0 # Define base_time when the file is sourced base_time=$(date +%s) ynh_script_progression () { # Declare an array to define the options of this helper. declare -Ar args_array=( [m]=message= [w]=weight= [t]=time [l]=last ) local message local weight local time local last # Manage arguments with getopts ynh_handle_getopts_args "$@" weight=${weight:-1} time=${time:-0} last=${last:-0} # Get execution time since the last $base_time local exec_time=$(( $(date +%s) - $base_time )) base_time=$(date +%s) # Get the number of occurrences of 'ynh_script_progression' in the script. Except those are commented. local helper_calls="$(grep --count "^[^#]*ynh_script_progression" $0)" # Get the number of call with a weight value local weight_calls=$(grep --perl-regexp --count "^[^#]*ynh_script_progression.*(--weight|-w )" $0) # Get the weight of each occurrences of 'ynh_script_progression' in the script using --weight local weight_valuesA="$(grep --perl-regexp "^[^#]*ynh_script_progression.*--weight" $0 | sed 's/.*--weight[= ]\([[:digit:]].*\)/\1/g')" # Get the weight of each occurrences of 'ynh_script_progression' in the script using -w local weight_valuesB="$(grep --perl-regexp "^[^#]*ynh_script_progression.*-w " $0 | sed 's/.*-w[= ]\([[:digit:]].*\)/\1/g')" # Each value will be on a different line. # Remove each 'end of line' and replace it by a '+' to sum the values. local weight_values=$(( $(echo "$weight_valuesA" | tr '\n' '+') + $(echo "$weight_valuesB" | tr '\n' '+') 0 )) # max_progression is a total number of calls to this helper. # Less the number of calls with a weight value. # Plus the total of weight values local max_progression=$(( $helper_calls - $weight_calls + $weight_values )) # Increment each execution of ynh_script_progression in this script by the weight of the previous call. increment_progression=$(( $increment_progression + $previous_weight )) # Store the weight of the current call in $previous_weight for next call previous_weight=$weight # Set the scale of the progression bar local scale=20 # progress_string(1,2) should have the size of the scale. local progress_string1="####################" local progress_string0="...................." # Reduce $increment_progression to the size of the scale if [ $last -eq 0 ] then local effective_progression=$(( $increment_progression * $scale / $max_progression )) # If last is specified, fill immediately the progression_bar else local effective_progression=$scale fi # Build $progression_bar from progress_string(1,2) according to $effective_progression local progression_bar="${progress_string1:0:$effective_progression}${progress_string0:0:$(( $scale - $effective_progression ))}" local print_exec_time="" if [ $time -eq 1 ] then print_exec_time=" [$(date +%Hh%Mm,%Ss --date="0 + $exec_time sec")]" fi ynh_print_info "[$progression_bar] > ${message}${print_exec_time}" }