lib/sh/util.sh: 2nd functions section: moved to 1st functions section
bugfix: lib/sh/util.sh: added workaround for bash bug where exit sometimes inxeplicably ignores $?
fix: lib/sh/util.sh: self_builtin: avoid $() so that $? isn't modified
lib/sh/util.sh: use new self_builtin
lib/sh/util.sh: added self_builtin
lib/sh/util.sh: pv(), pf(): moved to debugging section
bugfix: lib/sh/util.sh: stderr_matches(): also need to handle any filter error, such as caused by Ctrl+C
lib/sh/util.sh: stderr_matches(): echo_vars @PIPESTATUS_ to assist debugging
bugfix: lib/sh/util.sh: stderr2stdout(): use piped_cmd to ignore SIGPIPE since the output of this will piped to another command
lib/sh/util.sh: setup_log_fd(): $log_fd: use 3 (stdlog) since other scripts are likely to use this for logging as well
fix: lib/sh/util.sh: setup_log_fd(): fd_set_default(): use $log_fd instead of repeating the value of it
lib/sh/util.sh: die(): log at higher log_level, since this is logging code
lib/sh/util.sh: highlight_log_msg(): log at higher log_level, since this is logging code
bugfix: lib/sh/util.sh: stderr_matches(): only set benign_error=1 if the matched error occurred
lib/sh/util.sh: ignore_e(): also set benign_error=1
fix: lib/sh/util.sh: prep_try alias: removed inaccurate comment
bugfix: lib/sh/util.sh: stdout2fd(): moved after redir() which it depends on
fix: lib/sh/util.sh: command(): moved `|| die_e` to command__exec so it would be properly indented under the echoed command
lib/sh/util.sh: verbosity_compat(): log at higher log_level because it's logging code
lib/sh/util.sh: $benign_error: log at higher log_level because it's logging code
lib/sh/util.sh: $top_* vars, $is_outermost: log at higher log_level because it's startup code
lib/sh/util.sh: $top_script: echo_vars this like the other $top_* vars
lib/sh/util.sh: .(): log at higher log_level because it's startup code
lib/sh/util.sh: is_dot_script(): run with higher log_level since this is run at the beginning of the script
lib/sh/util.sh, runscripts/util.run: set_paths(): run with higher log_level to hide all the paths that are set at the beginning of the script
lib/sh/util.sh: added log++ stub
lib/sh/util.sh: added log_local stub
lib/sh/util.sh: added log() stub so internal commands can use it
fix: lib/sh/util.sh: echo_vars(): log at same log_level as echo_func so kw_params are displayed along with positional params
fix: lib/sh/util.sh: rel_path(): log this internal command at a higher log_level so it's normally hidden
fix: lib/sh/util.sh: log_msg!(): log split_lines at a higher log_level so it's normally hidden
bugfix: lib/sh/util.sh: stderr_matches(): `log_local; log++` should apply to just stdout_contains() and part of stderr2stdout() rather than all of stderr_matches()
lib/sh/util.sh: stderr_matches(): run at higher log_level because error-handling internals should not be logged by default
bugfix: lib/sh/db.sh: mysql_ctl(): need to ignore errors if not running
bugfix: lib/sh/util.sh: stderr_matches(): handle any error: only ignore_e if the error exit status was associated with the matched error message
bugfix: lib/sh/util.sh: stderr_matches(): handle any error: need force-exit with rethrow_exit() because caller's test of return status disables errexit
lib/sh/util.sh: added rethrow_exit(), which exits even where errexit is disabled
bugfix: lib/sh/db.sh: mysql_snapshot(): need to run `mysql_ctl start` even if there is an error
lib/sh/db.sh: mysql_snapshot(): $to: default to $from.bak
lib/sh/db.sh: added mysql_snapshot()
lib/sh/db.sh: added mysql_ctl()
lib/sh/db.sh: pg_cmd(): updated to use new sudo()
lib/sh/util.sh: sudo alias: use function instead so this can be overridden
lib/sh/util.sh: added is_intern()
lib/sh/util.sh: is_callable(): use just $1 because multiple args are not applicable
lib/sh/util.sh: added is_world_executable()
lib/sh/util.sh: added has_perms()
lib/sh/util.sh: esc_args(): renamed to just esc() because this can also be used on a single value
lib/sh/util.sh: added is_extern()
lib/sh/util.sh: added sudo alias to alias-expand command
lib/sh/db.sh: pg_cmd(): $as_root: use $sudo
lib/sh/util.sh: added $sudo
lib/sh/util.sh: added cp alias
lib/sh/db.sh: removed no longer used pg_as_root(), which was buggy anyway. use `as_root=1 ...` instead.
lib/sh/db.sh: mysql_ANSI: fixed comment
lib/sh/db.sh: pg_dump(): support dumping entire cluster, and cluster users
lib/sh/db.sh: pg_cmd(): added $as_root switch
lib/sh/db.sh pg_dump(), bin/pg_dump_vegbien: --format=plain: removed comment that this is the plain format, because this is now self-documenting
lib/sh/db.sh pg_dump(), bin/pg_dump_vegbien: --format: use the long form of the formats to make the code self-documenting
bugfix: lib/sh/util.sh: local_array/export_array: do need -a because that it's an array is apparently not autodetected by the () on Mac
lib/sh/util.sh: import_vars: documented that vars already set will not be overwritten
lib/sh/util.sh: removed end_try_subshell, which now does the same thing as end_try
fix: lib/sh/archives.sh: unzip(): support -p option, which pipes extracted data to stdout
fix: lib/sh/make.sh: direct the user to use begin_target instead of set_make_vars (set_make_vars is now used by begin_target)
bugfix: lib/sh/util.sh: die(): usage: documented that if msg uses $(...), save_e is needed
bugfix: lib/sh/util.sh: already_exists_msg(): need to save_e, because new $(mk_hint) call resets $?
lib/sh/util.sh: die(): always errexit even if $e = 0, because die always indicates an error
lib/sh/util.sh: added rethrow!(), which always errexits, even if $e = 0
lib/sh/util.sh: rethrow(): also work in situations where $e is not set
lib/sh/util.sh: rethrow: made it a function since there is now no need for it to be an alias
lib/sh/util.sh: rethrow: removed `test "$e" != 0` since errexit only does anything if $e != 0
lib/sh/util.sh: removed separate rethrow_exit*, rethrow_subshell*, since they now do the same thing as rethrow*
lib/sh/util.sh: rethrow*!: use new errexit, which works in functions and subshells
lib/sh/util.sh: added errexit(), used in place of (exit "$1") because a bug in bash prevents subshells from triggering errexit
lib/sh/util.sh: added bool!()
fix: lib/sh/util.sh: redir(): need to indent before invoking an external command (not just in command__exec(), but for all redir() calls)
lib/sh/make.sh: with_rm(): documented that it only works inside a runscript target that starts w/ begin_target
*{.sh,run}: runscript targets: use begin_target instead of echo_func so the target name is properly echoed. note that this requires using with_rm so that $rm is properly progagated to applicable invoked targets. (previously, $rm was progagated to all invoked targets. note that with_rm only works inside a runscript target that starts with begin_target.)
lib/sh/make.sh: self_make(): renamed to with_rm() for clarity, since this is used only to progagate $rm, and does not also invoke a command with the same name as the current function, as the name might suggest
bugfix: lib/sh/sync.sh: don't unintentionally rsync-ignore explicitly-specified files
lib/sh/util.sh: filesystem: added is_*(), could_be_*()
lib/sh/util.sh: added contains_match()
lib/sh/util.sh: added ends_with()
bugfix: lib/sh/util.sh: DON'T do `shopt -s lastpipe` because this causes a segfault on Linux in stderr_matches(). (it also isn't supported on Mac.) use @PIPESTATUS instead. note that we do not currently need lastpipe, since we use @PIPESTATUS (which actually provides more functionality for our purposes).
fix: lib/sh/util.sh: echo_func(): file/line #: display with regular color because the lighter color actually draws attention to rather than away from the faded text
lib/sh/util.sh: added plain()
bugfix: lib/sh/db.sh: pg_table_exists(): need ! to negate boolean result
fix: lib/sh/util.sh: fade(): use medium gray instead of light gray because it fades on white and black backgrounds
lib/sh/util.sh: echo_func(): fade the file/line # to avoid distracting from the function call in the default log output
lib/sh/util.sh: added fade()
lib/sh/util.sh: highlight_msg(): renamed to highlight_log_msg() to clarify that this contains log++-specific functionality
lib/sh/util.sh: moved terminal formatting commands to own section
lib/sh/util.sh: highlight_msg(): moved formatting code into separate format() function
lib/sh/util.sh: dp(): renamed to ps() to corresponding with pv/pf
lib/sh/make.sh: echo_target: use `log-- echo_func`, which now puts the target name first but also provides much-needed indentation
lib/sh/util.sh: echo_func(): put file/line # after function call instead of before so the function name is listed first
lib/sh/util.sh: echo_func(): usage: removed no longer used/implemented minor=1 switch. use log++ instead.
lib/sh/util.sh: ignore_err_msg(): usage: added $ignore_e param from stderr_matches()
fix: lib/sh/db.sh: pg_cmd(): hide PGPASSWORD at the normal verbosity so that the value of it doesn't appear in any log files
lib/sh/util.sh: log_hint(): renamed to log_err_hint() for clarity, because this applies only to hints for errors